@Valid 和@Validated的区别


@Valid 作用在方法,字段,构造器和参数上

@Validated 作用在类 方法 和参数上

@Validated 和@Valid 配合@ModelAttribute 与BindingResult 对对象进行校验 ,如果校验不通过,那么错误信息就会封装到BindingResult对象了,可以通过bindingResult的相关方法获取详细的错误信息并返回给用户。如果不加BindingResult则会抛出异常

@Validated 配合MethodValidationPostProcessor拦截器 实现对单个参数进行校验,在Controller前加@Validated,如下:注入这个拦截器


@Valid 支持嵌套校验

例如要对CsConfigDTO里的字段校验,需要在字段list上加@Valid,这时候CsConfigDTO里校验注解(例如@@NotNull等)就会生效

@Validated支持分组,而@Valid不支持




注意点:First 需要继承Default,不然其他参数校验不生效

对BindingResult全局处理,如果每个校验都去判断的话,太啰嗦重复了,用AOP处理

写一个注解作为aop的切点

写逻辑处理

使用,只要在需要处理的类上加上面写的注解即可 这时候对BindingResult的判断全交给aop去处理

说了这么多了,现在直接上例子说明下

  1. @Validated和@Valid都可以作用于参数
  2. 但是@NotBlank作用于参数时 需要在类上加上@Validated

原文地址:https://www.cnblogs.com/fangh816/p/13299509.html