数据校验Hibernate Validator

平时开发中遇到的问题,大部分已经有了答案,但需要去寻找

前言

java在很早(2009)就出现了校验规范Bean Validation,并且经历了几次标准的迭代,版本的历史就不去深究了。
在这里插入图片描述
Bean Validation 只是提供了校验规范和一些注解,并没有提供实现,而Hibernate Validator对其所有的constraint进行了实现,并增加了一些自定义的constraint。
spring-boot-starter-validation(新版本的starter-web不包含该依赖,需单独添加)对Hibernate Validator进行了封装,使其可以在spring mvc模块进行自动校验

除了接下来分析的Spring Validation, 一些规则引擎也具备校验功能,可以参考。

开始

区别@Valid@Validated
提供者JavaxSpring Validation
分组不支持支持
嵌套支持不支持
注解位置类、属性、构造方法、方法参数 、类型类、方法、方法参数
  • 封装型的请求参数校验

    在实体类的属性上使用相关约束的注解
    在这里插入图片描述
    然后在controller的方法上对要校验的参数使用@Valid@Validated进行标注

    @GetMapping("analysis")
    public List<ColumnChangDetail> analysis(@Valid AnalysisForColumnVO req) {
    	return analysisService.analysisForColumn(req);
    }
    

    发生请求时,若校验失败则会抛出指定的异常,可使用全局统一异常处理类中处理此类异常

    异常校验失败场景
    BindExceptionform-data
    MethodArgumentNotValidExceptionapplication/json
    ConstraintViolationException单个参数
  • 平铺型的请求参数校验
    如果请求参数没有使用实体类封装,则需要在Controller类上标注@Validated,否则不生效

    @RestController
    @RequestMapping("demo")
    @RequiredArgsConstructor
    @Validated
    public class DemoController {
    
        private final DemoService demoService;
    
        @GetMapping("{id}")
        public DemoVO getDetail(@Max(10) @PathVariable("id") Long id) {
            return demoService.getDetail(id);
        }
    }
    

Bean Validation内置约束

在这里插入图片描述被注解标注的属性的数据类型通常是有限制的,比如@Digits标注的变量类型必须是数字,若是放在了Strinig类型的变量上,在运行时会发生异常。在这里插入图片描述
这种细节问题容易造成不易发现的bug,那有没有一种机制可以在编译时提醒这种错误的用法呢,还真有hibernate-validator-annotation-processor,添加这个依赖,会在编译期间检查这些约束是否使用得当并提示。

Hibernate Validation扩展约束

在这里插入图片描述

分组

同样的参数在不同的场景下可能有不同的校验规则,这时可以使用分组校验。

嵌套

快速失败

当有多个参数校验时,它不会在发现第一个校验失败后停止,而是继续校验,直到发现所有的错误

自定义

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值