使用场景
1.Spring MVC 传入参数校验 结合@ControllerAdvice || @RestControllerAdvice
2.结合@ConfigurationProperties 从yml || properties中读取配置构造bean时候使用
3.结合@Value可以对@Value值做校验
4.实际业务中Service层也有公司用来校验
常见组合用法
1.如果使用@ConfigurationProperties || @Value对配置做校验,常搭配META-INF/additional-spring-configuration-metadata-json ,META-INF/spring-configuration-metadata.json 一起使用
2.在SpringMVC中校验常用DTO对入参对象校验,会涉及到@Validation(value=xxx.class) 用分组来对不同业务操作校验
@Validated @Valid区别
1.@Valid用户嵌套校验,其余如果不深究使用@Validated就可以了
2.Validated是org.springframework的annotation,@Valid 注解是javax.validation的注解.
3.@Validated:提供分组功能,可以在参数验证时,根据不同的分组采用不同的验证机制,@Valid:没有分组功能
4.@Validated:用在类型、方法和方法参数上。但不能用于成员属性(field),@Valid:可以用在方法、构造函数、方法参数和成员属性(field)上
ConfigurationProperties Validation
详情可查看@ConfigurationProperties Validation
Service Validation
详情可查看 @Service Validation
快速记忆使用方式
Bean类加@Validation,需要校验的对象前加@Validation,对象里的嵌套校验加@Valid
@Validated 原理
MethodValidationPostProcessor 源码分析
实现InitializingBean接口
由其中可看出仅对带有@Validated的Bean对象做PointCut处理
验证框架
自定义校验框架
Group Class
CheckAtLeastOneNotBlankValidator
在类上添加注解
e.g. 在类上添加
Annotation -> CheckAtLeastOneNotBlank
CheckAtLestOneNotBlankValidator
ValidateMobile
在字段上添加@ValidateMobile
MobileValidator
MobileUtil 判断手机号码的工具类