Java JSR参数校验实现

为什么使用参数校验?

在开发中前端虽然做了校验,但后端也是需要做校验的,前端防君子,后端防小人,让数据更安全。

如何使用

导包
  <!-- 校验字段 -->
   <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验证注解的元素值是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/

前台发请求校验

在这里插入图片描述
可以看到已经校验成功了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值