文章目录
前言
先说下Spring Validation参数校验,它是前后端分离项目SpringBoot后端Controller层必做的工作之一,目的是防止非法调用,
Java JSR303
定义了校验标准
validation-api
,但没有实现,Hibernate validation是规范的实现,另外还增加了一些
constraints
注解,最后
Spring Validation
对
Hibernate validation
进行了二次封装,支持在SpringMvc中自动校验!
那么,在Restful风格流行的当下,在SpringBoot中,主流的参数校验场景包括:
- 对于
POST
、PUT
请求,使用 @RequestBody传递的VO对象
参数校验 - 对于
GET、DELETE
请求,使用 @RequestParam传递的url拼接
参数校验 - 对于GET请求的无注解参数校验
接下来,我会图文结合带大家正确使用 @Valid、**@Validated以及constraints相关注解,工作必用,实战必会,最后有总结**,Let’s Go!
Java的标准定义的constraints注解位于:javax.validation.constraints
Hibernate validation增加的constraints注解位于:org.hibernate.validator.constraints
参数校验的绝配搭档:7.11 SpringBoot实战 全局异常处理 - 深入细节详解
引入Maven依赖
在springboot2.3之前,引入
spring-boot-starter-web
时,自动引入
validation
依赖,
但springboot2.3之后,需要单独引入依赖
spring-boot-starter-validation
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>
一、POST/PUT @RequestBody参数校验
对于
POST
、
PUT
请求,首选使用
@RequestBody
传递
VO对象
参数.
1.1 Valid或Validated注解配合constraints注解
以BookAdminController的saveBook为例:
- 在方法参数前加
@Valid
注解(换成@Validated
注解也可以):
- 对
BookVO
对象的字段上加constraints
注解,例如,对bookName
加一个@NotNull
注解
1.2 测试运行
入参未填
bookName
,会被参数校验异常的
MethodArgumentNotValidException
异常捕获,最后返回上图的结果~
二、GET/DELETE @RequestParam参数校验
对于
GET、DELETE
请求,首选使用
@RequestParam
传递的
url拼接
参数。
2.1 Validated注解配合constraints注解
以BookAdminController的getBook为例:
这时,需要在Controller上加
@Validated
注解, 在方法参数前加
constraints
注解,以
@Min
注解为例:
2.2 测试运行
因为
@Min
限制了最小值为1,所以当入参使用
id=0
调用时,会被参数校验异常的
ConstraintViolationException
异常捕获:
三、GET 无注解参数校验
在@RequestParam前加
constraints
注解的方式,参数少还可以用,参数多的时侯推荐封装成VO对象,调用方式依然不变~
3.1 Valid或Validated注解配合constraints注解
以BookAdminController的getBookCommentList为例,原来是这样写的:
现将参数封装成一个
PageVO
对象,并在字段上增加了
constraints
注解:
@Min
、
@Max
、
@NotNull
@DatapublicclassPageVOimplementsSerializable{@Min(value =1, message ="pageNum必须大于1")privateInteger pageNum =1;@Max(value =100, message ="pageSize不能超过100")privateInteger pageSize =100;@Min(value =1, message ="id必须大于1")@NotNullprivateInteger id;}
这时,和@RequestBody参数校验加注解的方式相同,对方法参数加
@Valid
注解(换成
@Validated
注解也可以):
3.2 测试运行
因为
@Max
限制了pageSize最大值为100,所以当入参使用
pageSize=1000
调用时,会被参数校验异常的
BindException
异常捕获:
总结
- POST/PUT @RequestBody参数校验,在方法参数VO前加
@Valid
或@Validated
,在VO字段上加constraints
相关注解 - GET/DELETE @RequestParam参数校验,在Controller上加
@Validated
,在方法参数前加constraints
相关注解 - GET 无注解参数校验,方法参数VO前加
@Valid
或@Validated
,在VO字段上加constraints
相关注解
对于
constraints
相关注解具体细节,我找了两篇供大家参考:
强悍的Spring之spring validation
Hibernate Validator详解
最后
看到这,觉得有帮助的,刷波666,感谢大家的支持~
想要看更多实战好文章,还是给大家推荐我的实战专栏–>《基于SpringBoot+SpringCloud+Vue前后端分离项目实战》,由我和 前端狗哥 合力打造的一款专栏,可以让你从0到1快速拥有企业级规范的项目实战经验!
具体的优势、规划、技术选型都可以在《开篇》试读!
订阅专栏后可以添加我的微信,我会为每一位用户进行针对性指导!
另外,别忘了关注我:天罡gg ,怕你找不到我,发布新文不容易错过: https://blog.csdn.net/scm_2008
版权归原作者 天罡gg 所有, 如有侵权,请联系我们删除。