前言
@Validated 注解的主要目的是启用和利用 Spring 的验证框架,它可以用于类上也可以用于方法参数上。用于类上时,表示该类中的所有方法参数都需要通过验证框架进行验证;用于方法参数上时,则仅表示该参数需要被验证。选择哪种方式取决于具体的业务需求和个人偏好。
步骤
1、引入依赖,这是 Spring 用来实现数据验证的基础库
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2、然后我们将注解@Validated放在类上开启验证功能,将注解@Valid放在参数实体上代表对实体进行校验,例如
@RestController
@RequestMapping("/test")
@Validated
public class TestController {
@PostMapping()
public R test(@Valid @RequestBody TestDTO dto){
return R.ok("响应成功");
}
}
3、然后我们在请求体中随时用如下注解即可通过框架自动进行验证,我这里是使用统一异常捕捉进行全局异常情况拦截,有关统一异常封装,大家可以关注我看我另一篇文章。
统一的参数异常捕捉
/**
*处理参数校验异常
* @param e
* @return
*/
@ExceptionHandler
public R handlerException(MethodArgumentNotValidException e) {
e.printStackTrace();
BindingResult bindingResult = e.getBindingResult();
return R.fail(bindingResult.getFieldErrors().get(0).getDefaultMessage());
}
参数实体
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
@Data
public class TestDTO {
@NotBlank(message = "a参数不能为空")
private String a;
@NotNull(message = "b参数不能为null")
private String b;
@Max(value = 10,message = "请输入正确的范围")
private Integer c;
}
4、通过apifox工具调用测试结果如下
5、以下是常用的注解说明
注解 | 类型 | 说明 |
---|---|---|
@Null | Object | 校验必须为null |
@NotNull | Object | 校验必须不能是null,并且必须有一个非空格字符 |
@NotEmpty | 字符串、集合、映射等类型 | 值不为空(即不为 null 且不为空字符串、空集合或空映射)。 |
@AssertTrue | boolean、Boolean | 参数需要为true,传null允许通过,注意,当传了0时会认为是false不通过 |
@AssertFalse | boolean、Boolean | 参数需要为true,传null允许通过,注意,当传了0时会认为是false允许通过 |
@Max | BigDecimal、BigInteger,基本数字类型及其包装类等 | 允许的最大值,null允许通过 |
@Min | BigDecimal、BigInteger,基本数字类型及其包装类等 | 允许的最小值,null允许通过 |
@Negative | BigDecimal、BigInteger,基本数字类型及其包装类等 | 数字类型的值必须小于零,null允许通过 |
@Negative | BigDecimal、BigInteger,基本数字类型及其包装类等 | 数字类型的值必须小于等于零,null允许通过 |
@Positive | BigDecimal、BigInteger,基本数字类型及其包装类等 | 数字类型的值必须大于零,null允许通过 |
@PositiveOrZero | BigDecimal、BigInteger,基本数字类型及其包装类等 | 数字类型的值必须大于等于零,null允许通过 |
@Digits(integer = 10, fraction = 2) | 字符串、BigDecimal、BigInteger,基本数字类型及其包装类等 | 整数位数和小数位数限制,null允许通过 |
@Pattern | 字符串 | 正则表达式匹配,null允许通过 |
@Email字符串 | 字符串 | 邮箱格式校验,null允许通过 |
@Size | 字符串、集合、映射等类 | 校验大小的范围,null允许通过,如 @Size(min = 1, max = 3, message = “最大范围为1-3”) |
为了帮助更多像你一样的读者,我将持续在专栏中分享技术干货和实用技巧。如果你觉得这篇文章对你有帮助,可以考虑关注我的专栏,谢谢。