springmvc参数绑定的几种方式总结:

在使用spring的项目中,前台传递参数到后台是经常遇到的事, 我们必须熟练掌握一些常用的参数传递方式和注解的使用,废话少说,直接上正文。

1. @requestMapping:

类级别和方法级别的注解, 指明前后台解析的路径。 有value属性(一个参数时默认)指定url路径解析,method属性指定提交方式(默认为get提交) 

@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;


    @RequestMapping(value = "/find",method = {RequestMethod.GET})
    @ResponseBody
    public User findUser() {
        User user = userService.findUser();
        return user;
    }
}

在这个例子中,如果前台要访问findUser方法,那么,前台的url应为:http://localhost:8080/user/find

2.直接传参:

第一种最简单的绑定就是直接前台传参,后台的方法里面的形参和前台参数方法名一致,则可以接受到前台的参数。

@RequestMapping(value = "/save",method = {RequestMethod.GET})
    @ResponseBody
    public int save(String name , String sex) {
        User user = new User();
        user.setAddress("湖南");
        user.setBirthday(new Date());
        user.setSex(sex);
        user.setUsername(name);
        return userService.saveUser(user);
    }


url:http://localhost:8080/user/save/?name=张三&sex=女


3. @RequestParam:

请求参数规则注解。 value属性匹配前台传递的参数的名字(一个参数时默认),required属性此字段是否必须传值(boolean,默认为true),defaultValue此参数的默认值(存在此参数时,说明前台不必需传递参数,required为false) 

@RequestMapping(value = "/save",method = {RequestMethod.GET})
    @ResponseBody
    public int save(@RequestParam(value = "name",required = true) String name1 , @RequestParam(value = "sex",required = true) String sex1) {
        User user = new User();
        user.setAddress("湖南");
        user.setBirthday(new Date());
        user.setSex(sex1);
        user.setUsername(name1);
        return userService.saveUser(user);
    }

前台url:http://localhost:8080/user/save/?name=张三&sex=女

4. @PathVariable:

url参数注解, 一般用于从url中获取参数,具体看下图:

@RequestMapping(value = "/save/{name}/{sex}",method = {RequestMethod.GET})
    @ResponseBody
    public int save(@PathVariable("name") String name ,@PathVariable("sex") String sex) {
        User user = new User();
        user.setAddress("湖南");
        user.setBirthday(new Date());
        user.setSex(sex);
        user.setUsername(name);
        return userService.saveUser(user);
   }


url:http://localhost:8080/user/save/张三/男

 


5. 特殊的属性编辑器

在前台到后台data日期类型等的转化会出错,此时我们需要属性编辑器进行属性的转化 //日期传递参数会产生异常,因此在传递时间参数时,需要进行类型转换,在初始化时进行数据的绑定与转化

@RequestMapping(value="/todate/{data}",method=RequestMethod.GET)

    public String todate(@PathVariable("data") Date date){

        System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));

        return "start";

    }

    @InitBinder    //初始化参数绑定, 日期类型的转化,

    public void initBinder(ServletRequestDataBinder binder){

        binder.registerCustomEditor(java.util.Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));

    }

总结:

注意两个区别

  1. @PathVariable是获取url上数据的(根据{}里面的内容来匹配,见上面第四点)。@RequestParam获取请求参数的(包括post表单提交,根据参数名来匹配)
  2. 如果加上@ResponseBody注解,就不会走视图解析器,不会返回页面,目前返回的json数据。如果不加,就走视图解析器,返回页面

版权声明:本文为yuan_qh原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。