Java Validation方法入参校验实现过程解析
一.前言

在日常的开发中,经常需要对方法参数进行校验(非空、长度等)。如果采用hardcode去校验(if..else..),会造成代码冗余,复用性低,导致维护成本比较高。借助Validation组件,可以很方便地通过注解来校验参数。
二.Java Validation组件
JSR
JSR 是一种规范标准,规定了一些校验规范的注解,位于javax.validation.constraints包下,只提供规范不提供实现,如@NotNull,@Size 等
Hibernate Validation
hibernate Validation 与 hibernate ORM框架没有半毛钱关系,它提供了JSR的实现,位于org.hibernate.validator.constraints包下。
三.用法
引入依赖:
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> </dependency>
手动添加bean :
对实体类添加注解:
@Data
publicclassPeople {
@NotNull(message = "姓名不能为空")
privateStringname;
@Min(value = 1, message = "年龄不能小于1岁")
privateInteger size;
}
Controller层上用法:
如果在Spring的Controller层引用以上Java Bean对象,则需要加上@Valid注解,用法如下:
@RestController
@RequestMapping("/api")
publicclassPeopleController {
@Autowired
privatePeopleService peopleService;
@RequestMapping("/addPeople")
publicStringaddPeople(@Valid@RequestBodyPeople people) {
peopleService.addPeople(people);
return"ok";
}
}
Service层上用法:
@Valid注解,当我们用Service接口层的时候,会发现参数校验逻辑是不生效的。要向让@Valid注解在controller层以外的地方生效,必须配合@Validated来使用。这是因为Spring给我们创建了一个用于参数校验的AOP切面逻辑,过滤方式就是class被@Validated修饰的bean对象。所以我们可以使用@Validated来修饰我们的service层实现类:
@Validated
public interface PeopleService {
voidaddPeople(@ValidPeople people);
}
Controller层不需要@Validated注解是因为在Spring的controller层有数据绑定和校验的过程,默认就会对@Valid修饰的方法参数使用Validator来做校验逻辑。
四.原理
1.利用Spring ioc,注入MethodValidationPostProcessor和LocalValidatorFactoryBean。
2.利用Spring ioc提供的扩展点(BeanPostProcessor, InitializingBean),初始化拦截器MethodValidationInterceptor
3.MethodValidationPostProcessor用来生成和植入拦截器MethodValidationInterceptor,调用方法时自动拦截。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
代码知识SEO上一篇 : jasypt 集成SpringBoot 数据库密码加密操作
下一篇 : python3中calendar返回某一时间点实例讲解
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!