微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于springmvc中接收参数的几种方式

分享目前所遇到的SSM项目中,@Controller层接收参数的几种方式。

一、根据属性名传递数据

这是最简单的情况,传递来的参数名直接与后台的参数值相对应。比如在地址栏输入这样一个地址:http://localhost:8080/user?username=abc 	

后台代码

@Controller
public class TestController {

    @ResponseBody
    @RequestMapping(value = "/user")
    public void input(String username){
        System.out.println(username);
    }
}

​ 定义在方法中的参数就根据属性名和类型获取到来自前端的数据,保证名字一致!

二、封装到bean中传递数据

        <p>
            <label for="user_login">用户名或电子邮件地址<br />
                <input type="text" name="username" id="user_login" class="input" value="<%=username%>" size="20" required/></label>
        </p>
        <p>
            <label for="user_pass">密码<br />
                <input type="password" name="password" id="user_pass" class="input" value="<%=password%>" size="20" required/>
            </label>
        </p

​ 这是前台登录页面的部分标签,在用户点击登录按钮的时候。会将这个form 标签的所有数据一起发送到后台。显然这时候就不能在方法中创建那么多参数使之于参数一一对应,这时候就需要封装一个bean,用他来接收数据。

后台代码

    @RequestMapping(value = "/insertSubmit", method = RequestMethod.POST)
    public String insertUserSubmit(User user) {
        User user2 = userService.getUserByName(user.getUserName());
        User user3 = userService.getUserByPassword(user.getUserPassword());
        if (user2 == null && user3 == null) {
            user.setUserRegisterTime(new Date());
            user.setUserStatus(1);
            user.setUserRole(UserRole.USER.getValue());
            userService.insertUser(user);
        }
        return "redirect:/admin/user";
    }

​ input的name属性对应的值被传递到User里面的属性里面,如果在值只传递了部分属性,其他属性会为空。同时要注意到User里面要有set,get方法,没有就不注入。

三、通过HttpServletRequest来传递数据

​ 同样的,对于上面那个登录例子,如果我们只是进行简单的数据传递,输出。我们还可以利用HttpServletRequest来传递数据。

后台代码

 public String loginVerify(HttpServletRequest request, HttpServletResponse response) {

        String username = request.getParameter("username");
        String password = request.getParameter("password");

四、利用@RequestParam和@PathVariable来接收参数

​ 我注意到,在SSM项目中这两个注解是最常用来接收参数的,因为他们使用起来更灵活方便。

  • @RequestParam

​ value=”name” 表示参数名称

required=true 表示如果没有传递参数,则会报 400参数异常。

@Controller
public class TestController {

    @ResponseBody
    @RequestMapping(value = "/user")
    public void input(@RequestParam(value = "username", required = true) String name){
        System.out.println(name);
    }
}

前台URL地址http://localhost:8080/user?username=abc

  • @PathVariable

    @PathVariable注解的作用就是从URL里面读取参数值,可以在@RequestMapping里面添加占位符{paramName},如http://localhost:8099/user/xxx/xxx/

    @Controller
    public class TestController {
    
        @ResponseBody
        @RequestMapping(value = "/user/{username}/{id}")
        public void input(@PathVariable("username") String name, @PathVariable("id") int id){
            System.out.println(name);
            System.out.println(id);
        }
    }
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐