为什么使用参数校验?
在开发中前端虽然做了校验,但后端也是需要做校验的,前端防君子,后端防小人,让数据更安全。
如何使用
导包
<!-- 校验字段 -->
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>2.0.2</version>
</dependency>
校验分组
什么是校验分组?
校验分组目的: 是区分当前操作是否需要校验
例如: 新增数据Id字段我们是不需要的(因为id自增),但修改时我们需要Id,此时我们就可以给他设定一个UpdateGroups组,在修改数据时校验Id不不允许为空
新建一个valid包,创建三个分组分别为AddGroup、UpdateGroup、UpdateStatusGroup
配置全局异常类
@Slf4j
@RestControllerAdvice(basePackages = "com.weifufa.easyaution.product.controller")
public class EasyautionExceptionControllerAdvice {
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public R handleVailException(MethodArgumentNotValidException e) {
log.error("数据校验出现问题{},异常类型:{}", e.getMessage(), e.getClass());
BindingResult bindingResult = e.getBindingResult();
Map<String, String> errorMap = new HashMap<>();
bindingResult.getFieldErrors().forEach((fieldError -> {
errorMap.put(fieldError.getField(), fieldError.getDefaultMessage());
}));
return R.error(BizCodeEnume.VAILD_EXCEPTION.getCode(), BizCodeEnume.VAILD_EXCEPTION.getMsg()).put("data",errorMap);
}
@ExceptionHandler(value =Throwable.class)
public R handleException(Throwable throwable)
{
log.error("错误",throwable);
return R.error(BizCodeEnume.VAILD_EXCEPTION.getCode(),BizCodeEnume.VAILD_EXCEPTION.getMsg());
}
}
标记需要校验的字段
在实体类上标记即可
常用注解
注解 | 备注 |
---|---|
AssertFalse | 限制必须为false |
AssertTrue | 限制必须为true |
DecimalMax(value) | 限制必须为一个不大于指定值的数字 |
DecimalMin(value) | 限制必须为一个不小于指定值的数字 |
Digits(integer,fraction) | 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction |
验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式 | |
Future | 限制必须是一个将来日期 |
FutureOrPresent | 限制必须是一个将来或当前日期 |
Max(value) | 限制必须为一个不大于指定值的数字 |
Min(value) | 限制必须为一个不小于指定值的数字 |
Negative | 限制必须为一个负数 |
NegativeOrZero | 限制必须为一个负数或者0 |
NotEmpty | 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0) |
NotBlank | 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格 |
NotNull | 限制必须不为null |
Null | 限制只能为null |
Past | 限制必须是一个过去的日期 |
PastOrPresent | 限制必须是一个过去或者当前日期 |
Pattern(value) | 限制必须符合指定的正则表达式 |
Positive | 限制必须为一个正数 |
PositiveOrZero | 限制必须为一个正数或者0 |
Size(max,min) | 限制字符长度必须在min到max之间 |
更多资料参考文档: https://beanvalidation.org/2.0/
前台发请求校验
可以看到已经校验成功了!