导读
在 JavaEE 项目中, RestFull 层接收参数首先要对一些字段的格式进行校验,以防止所有查询都落到数据库,这也是一种合理的限流手段。以前基本上都是用 if...else...,这样的代码太啰嗦,除了使用策略模式进行优化,今天介绍一下校验注解@Valid,@Validated和@PathVariable,不仅可以减轻代码量,还加强了代码的易读性。
正文
1. @Valid 和 @Validated 区别
先讲一下这两个注解:@Valid与@Validated都是用来校验接收参数的,如果不使用注解校验参数,那么就需要在业务代码中逐一校验,这样会增加很多的工作量,并且代码不优美。
刚开始接触的时候多半会被弄混,实际上二者差距还是挺大的。根据自己的项目经验,@Validated和@Valid各有特点,可以联合使用。
- 提供者
javax.validation.Valid:使用 Hibernate validation 的时候使用,是 JSR-303 规范标准注解支持。如果你是 springboot 项目,那么可以不用单独引入依赖了,因为它就存在于最核心的 web 开发包(spring-boot-starter-web)里面;
org.springframework.validation.annotation.Validated:只用 Spring Validator 校验机制使用,是 Spring 做得一个自定义注解,增强了分组功能;
- 标注位置
@Validated:可以用在类型、方法和方法参数上,不能用于成员属性(field)上。如果注解在成员属性上,则会报不适用于field的错误;
@Valid:可以用在方法、构造函数、方法参数和成员属性(field)上;
- 分组支持
@Validated:提供分组功能,可以在参数验证时,根据不同的分组采用不同的验证机制;
@Valid:没有分组的功能,不能进行分组校验;
-
嵌套支持
@Validated:不能进行嵌套对象校验;
@Valid:可以进行嵌套校验,但是,需要在嵌套的字段上面加上注解;
2. 常用的校验方法
- Debug进入jar包,可以看到全量的相关注解:
- 简述一些常用注解: