让你的代码更加简练,springboot使用JSR303校验

图片

痛点

 

图片

 

相信不少人写过这样都代码,对方法入参进行了各种校验。上面还是比较少的校验。如果遇到什么邮箱、手机号更复杂,对格式也需要进行校验。可能洋洋洒洒几百行代码就过去了。这种代码其实跟业务流程没有太多关系,但是又不能不做。那么有没有一种方法可以避免呢。当然有!就是JSR-303(JSR是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求,是Java界的一个重要标准)校验规范。

 

JSR-303

 

JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方的参考实现是Hibernate Validator。需要注意的是此实现与 Hibernate ORM 没有任何关系。JSR 303 用于对 Java Bean 中的字段的值进行合法性验证。Spring MVC 3.x 开始支持 JSR-303,可以在控制器中对提交的数据进行JSR-303验证。 把验证交给框架,让我们更专注于业务 。常用的规则如下:

 

 

图片

 

springboot中JSR的使用

 

默认springboot集成了 hibernate-validator,而且默认是生效的,可以直接使用。默认不支持基础类型的验证,必须配置拦截器MethodValidationPostProcessor,在Controller类上加 @Validated注解可以实现对方法参数的校验。而且默认只验证 controller 方法上的 validator 注解,而不会验证 controller 层以外的。所以,如果要在其他层使用 validator 验证的话,需要单独配置拦截器.

图片

 

如果验证对象是java Bean,就更好操作了,我们下面走一个完整的springboot例子,

先构建一个需要校验的java Bean,通过JSR-303的校验注解进行对应的操作,如下

 

图片

 

在springmvc接口中 像下面一样增加一个@Valid 注解就行了

图片

 

这里可能你产生了疑问,如果校验失败我们怎么办?不知道你是否了解springboot 统一异常处理

(通过@ControllerAdvice 声明一个全局异常类)我们可以通过统一拦截处理校验异常把上面注解中的的message信息返回给前端。值得注意的是,如果你前台传入的参数不在body中,校验失败抛出BindException异常,如果接口方法的参数有@RequstBody 注解,即参数放在body中传输,会抛出MethodArgumentNotValidException 异常,分别加以处理即可。样例如下

 

图片

 

图片

 

如果上面的不满足需要,我们还可以对hibernate-validator 进行扩展,甚至可以实现fail-fast 机制(当有错误时剩下的都不再进行校验立即失败)。这个留给你自己探索发现。上面的可以应付大多数场景,而且如果配合lombok 神器 你的代码会更加清晰简练。


我是码农小胖哥,关注我的头条或者公众号,天天有干货。有问题可以留言或者私信,觉得写的不错可以点个赞,转发一下。

图片

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值