SpringMVC的几个常用注解

@RequestParam

  1. 参数value,将请求的参数绑定到方法中的参数上,请求参数可以和方法参数不同;
  2. 参数required,默认情况下,required=true,也就是参数必须要传。required=false,表示该参数可以传可不传。如果不传,且没有默认值的话,就为null。
  3. 参数defaultValue ,如果本次请求没有携带这个参数,或者参数为空,那么就会启用默认值。用了这个参数,那么required为true时,不传参数也不会报错。
1
2
3
4
@RequestMapping("/happy")
public String sayHappy(@RequestParam(value = "name", required = false) String userName, @RequestParam(value = "age", required = true, defaultValue = "20") String age) {
//age参数必须传,如果为空则默认为20,name可传可不传,将name绑定到userName,接口文档的参数和value里面的参数一致
}

注意:

  1. @RequestParam是通过Request.getParameter() 来获取参数值的,它可以处理Get请求和POST请求的值

  2. 用来处理Content-Type: 为application/x-www-form-urlencoded、multipart/form-data编码的内容,提交方式GET、POST。

  3. application/json, application/xml,必须使用@RequestBody来处理

  4. multipart/form-data,application/x-www-form-urlencoded,@RequestBody不能处理

@PathVariable

该注解用于方法修饰方法参数,会将修饰的方法参数变为可供使用的uri变量(可用于动态绑定)。

1
2
3
4
@RequestMapping(value="/happy/{dayid}",method=RequestMethod.GET)
public String findPet(@PathVariable String dayid, Model mode) {
//使用@PathVariable注解绑定 {dayid} 到String dayid
}

@PathVariable中的参数可以是任意的简单类型,如int, long, Date等等。Spring会自动将其转换成合适的类型或者抛出 TypeMismatchException异常。

@Validated和@Valid

####用法

在Controller层增加一个参数BindingResult,BindingResult必须紧挨着要检验的参数后面

1
2
3
4
5
6
public String test02(@RequestBody @Validated User user, BindingResult result){
if (result.hasErrors()){
return "false: "+result.getFieldError().getDefaultMessage();
}
return "success " + result.toString();
}

####区别

link

  1. 注解位置

@Validated:用在类型、方法和方法参数上;但不能用于成员属性

@Valid:可以用在方法、构造函数、方法参数和成员属性上

  1. 分组校验

@Validated:提供分组功能,可以在参数验证时,根据不同的分组采用不同的验证机制

@Valid:没有分组功能

  1. 嵌套检验

一个待验证的pojo类,其中还包含了待验证的对象,需要在待验证对象上注解@Valid,才能验证待验证对象中的成员属性,这里不能使用@Validated。

-------- ♥感谢阅读♥ --------