1、有@RequestBody注解时
在方法参数前面加注解@Valid或者@Validated,在类上面加注解无效
2、@RequestBody修饰的对象里面有嵌套对象
嵌套对象上用@Valid修饰(JSR303自身的校验),@Valid支持嵌套校验
3、入参是普通变量
需要在类上加上@Validated注解,加@Valid无效
原理:MethodValidationPostProcessor,生成代理对象,切点切@Validated标注的类
JSR303和Hibernate Validator只能对object进行校验,不能对单个参数进行校验,
spring进行扩展,添加拦截器,可以实现对方法参数的校验。校验不通过会抛
ConstraintViolationException异常
4、没有@RequestBody标注的对象作为方法参数
校验方法和原理与1一致
注:处理普通对象,且没有@RequestParam或者@RequestBody注解,使用
ServletModelAttributeMethodProcessor,查看方法参数前面有没有@Valid或者@Validated注解
5、ValidationAutoConfiguration
可以直接使用
@Autowired protected Validator validator;