@Valid
注解,是 Bean Validation 所定义,可以添加在普通方法、构造方法、方法参数、方法返回、成员变量上,表示它们需要进行约束校验。
@Validated
注解,是 Spring Validation 锁定义,可以添加在类、方法参数、普通方法上,表示它们需要进行约束校验。同时,@Validated
有 value
属性,支持分组校验。属性如下:
1 2 3 |
// Validated.java Class<?>[] value() default {}; |
对于初学的胖友来说,很容易搞混 @Valid
和 @Validated
注解。
① 声明式校验
Spring Validation 仅对 @Validated
注解,实现声明式校验。
② 分组校验
Bean Validation 提供的 @Valid
注解,因为没有分组校验的属性,所以无法提供分组校验。此时,我们只能使用 @Validated
注解。
③ 嵌套校验
相比来说,@Valid
注解的地方,多了【成员变量】。这就导致,如果有嵌套对象的时候,只能使用 @Valid
注解。例如说:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// User.java public class User { private String id; @Valid private UserProfile profile; } // UserProfile.java public class UserProfile { @NotBlank private String nickname; } |
- 如果不在
User.profile
属性上,添加@Valid
注解,就会导致UserProfile.nickname
属性,不会进行校验。
当然,@Valid
注解的地方,也多了【构造方法】和【方法返回】,所以在有这方面的诉求的时候,也只能使用 @Valid
注解。
🔥 总结
总的来说,绝大多数场景下,我们使用 @Validated
注解即可。
而在有嵌套校验的场景,我们使用 @Valid
注解添加到成员属性上。
