实际项目中不仅仅前端需要做必填项等校验,为防止非法参数对业务造成影响,后端也需要对相关参数做校验,接下来就学习一下在Springboot项目中如何对参数进行校验。本文Springboot版本为2.6.8
引入依赖
如果Springboot
版本小于2.3.x
,spring-boot-starter-web
会自动传入hibernate-validator
依赖。如果Springboot版本大于2.3.x
,则需要手动引入依赖: 温馨提示:7.x.x版本可能会不起效
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.2.0.Final</version>
</dependency>
复制代码
或者直接引入springboot的场景启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>2.7.0</version>
</dependency>
复制代码
@Validated和@Valid区别
**@Validated
对@Valid
**进行了二次封装,但是二者有以下的区别:
- **
@Validated
提供分组功能,可以在参数验证时,根据不同的分组采用不同的验证机制。@Valid
**没有分组功能 - **
@Validated
用在类型、方法和方法参数上。但不能用于成员属性(field),@Valid
**可以用在方法、构造函数、方法参数和成员属性(field)上 - 一个待验证的pojo类,其中还包含了待验证的对象属性,需要在待验证对象上注解**
@Valid
,才能验证待验证对象中的成员属性,这里不能使用@Validated
**
统一异常处理
如果校验不通过会报MethodArgumentNotValidException或者 ConstraintViolationException
@RestControllerAdvice
public class ParamException {
@ExceptionHandler({MethodArgumentNotValidException.class})
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ResultReturn handleMethodArgumentNotValidException(Metho