java fileinputstream 安全管理器校验失败_快速入手 Spring Boot 参数校验

  • 1、背景介绍
  • 2、Spring Boot文档中的Validation
  • 3、Hibernate Validator
  • 4、Spring Validator
  • 5、示例
  • 6、补充
  • 参考

  • 《Java 2019 超神之路》
  • 《Dubbo 实现原理与源码解析 —— 精品合集》
  • 《Spring 实现原理与源码解析 —— 精品合集》
  • 《MyBatis 实现原理与源码解析 —— 精品合集》
  • 《Spring MVC 实现原理与源码解析 —— 精品合集》
  • 《Spring Boot 实现原理与源码解析 —— 精品合集》
  • 《数据库实体设计合集》
  • 《Java 面试题 —— 精品合集》
  • 《Java 学习指南 —— 精品合集》

1、背景介绍

开发过程中,后台的参数校验是必不可少的,所以经常会看到类似下面这样的代码

v2-167dbb02681b5339384935a615022ddb_b.jpg

这样写并没有什么错,还挺工整的,只是看起来不是很优雅而已。

接下来,用Validation来改写这段

2、Spring Boot文档中的Validation

在Spring Boot的官网中,关于Validation只是简单的提了一句,如下

v2-d37e388e07d7a74d533135a83d8f2fd0_b.jpg

其实,Spring Validator 和**Hibernate Validator** 是两套Validator,可以混着用,这里我们用**Hibernate Validator**

3、Hibernate Validator

https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#preface

4、Spring Validator

https://docs.spring.io/spring/docs/5.0.5.RELEASE/spring-framework-reference/core.html#validation

5、示例

5.1、引入spring-boot-starter-validation

v2-3bd5572a82a396dbbc7ad70bbba8b267_b.jpg

5.2、定义一个对象

v2-79d189567a88b706d6b0c85441ace745_b.jpg

5.3、适用@Valid校验,并将校验结果放到BindingResult对象中

v2-c4a10fbdc402986786e46416783acc67_b.jpg

注意:

  • 默认情况下,如果校验失败会抛javax.validation.ConstraintViolationException异常,可以用统一异常处理去对这些异常做处理
  • An Errors/BindingResult argument is expected to be declared immediately after the model attribute

5.4、看效果

v2-cd61dc1d09d2676d52b49a08c23d34d1_b.jpg

v2-a8c9e4592be18ff5e3664322b0308bab_b.jpg

如果在校验的对象后面再加上Model对象的话,如果返回的是ModelAndView就可以将这个Model设置到其中,这样在页面就可以取到错误消息了

v2-4a31108ee21fbd941cf8fcb50a6083c7_b.jpg

仅仅只是单字段校验的话未免也太不灵活了吧,如果字段之间有关联关系,那该如何校验呢?答案是自定义

5.5、自定义校验规则

https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#validator-customconstraints

v2-4c00a1662759888fd54e42f2038a88b5_b.jpg

这里,以优惠券创建为例来演示如何自定义校验规则

首先,优惠券表单如下(仅仅只是演示用):

v2-2a06fb9175e2f449045e058307e92cc1_b.jpg

这里除了自定义了两条校验规则之外,还用到了分组。

为什么要有分组这一说呢?因为,举个例子,添加的时候不需要校验id,而修改的时候id不能为空,有了分组以后,就可以添加的时候校验用组A,修改的时候校验用组B

下面重点看一下@CheckTimeInterval

第一步 、定义一个注解叫CheckTimeInterval

v2-5d84567d7b0e16532e49c3a2c09310e0_b.jpg

第二步 、定义Validator去校验它

v2-9bb092693f22aa854cc0056bf3a08398_b.jpg

顺便提一句,这里BeanWrapper去取对象的属性值,我们稍微看一下BeanWrapper是做什么的

v2-f62cc1768eb308bb88e0754545df4012_b.jpg

v2-6c27b23091eeef56728fdf7ed602f8be_b.jpg

言归正传

第三步 、验证

v2-5e1edd325655867ae1f287cbf785030c_b.jpg

v2-39345eb6b8f5bd6da34469250bcc708c_b.jpg

v2-6ea2d0cf51ffb099bb58c26a0ab104e9_b.jpg

看,自定义的校验生效了

6、补充

6.1、校验模式

https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-fail-fast

下面补充一点,关于校验模式

默认会校验完所有属性,然后将错误信息一起返回,但很多时候不需要这样,一个校验失败了,其它就不必校验了

为此,需要这样设置

v2-3c40829a650f96ab57be6975d78f8601_b.jpg

6.2、单个参数校验

v2-2ac3b9df16056d1977f5f09ddc24268a_b.jpg

v2-2e7e7052df26db7eda5e83d3e1f7abf7_b.jpg

v2-f0b3b1552caa8e71e13cf442b82e58d8_b.jpg

如果是调整页面的时候参数校验失败的话,这时可以不做处理,让其调到错误页面。

如果是接口参数校验失败的话,可以在这里进行统一处理,并返回。例如:

v2-7b4e63c983f4d0fab9e51c567b463de7_b.jpg

6.3、错误页面

v2-71e90e6b426df2d0feb72bc656e60b8d_b.jpg

v2-b45d5d7f886b96dde087008159b58c8a_b.jpg

以刚才优惠券详情为例

http://localhost:8080/coupon/detail.html      400

http://localhost:8080/coupon/detail.html?id=    400

http://localhost:8080/coupon/detail.html?id=abc   400

http://localhost:8080/coupon/detail222.html?id=123  404

无权限  403

int a = 1 / 0;  500

6.4、@Valid与@Validated

https://blog.csdn.net/qq_27680317/article/details/79970590

参考

http://rensanning.iteye.com/blog/2357373

https://blog.csdn.net/kenight/article/details/77774465

https://www.cnblogs.com/mr-yang-localhost/p/7812038.html

https://www.phpsong.com/3567.html

springboot使用hibernate validator校验

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值