0


7.13 在SpringBoot中 正确使用Validation实现参数效验

CSDN成就一亿技术人

文章目录


前言

先说下Spring Validation参数校验,它是前后端分离项目SpringBoot后端Controller层必做的工作之一,目的是防止非法调用,

Java JSR303

定义了校验标准

validation-api

,但没有实现,Hibernate validation是规范的实现,另外还增加了一些

constraints

注解,最后

Spring Validation

Hibernate validation

进行了二次封装,支持在SpringMvc中自动校验!

那么,在Restful风格流行的当下,在SpringBoot中,主流的参数校验场景包括:

  1. 对于POSTPUT请求,使用 @RequestBody传递的VO对象参数校验
  2. 对于GET、DELETE请求,使用 @RequestParam传递的url拼接参数校验
  3. 对于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

标签: spring boot 后端 java

本文转载自: https://blog.csdn.net/scm_2008/article/details/132790737
版权归原作者 天罡gg 所有, 如有侵权,请联系我们删除。

“7.13 在SpringBoot中 正确使用Validation实现参数效验”的评论:

还没有评论