java fileinputstream 安全管理器校验失败_Spring Boot 参数校验详解

a1b51e32700b5f11ea57c150ccadf1f3.png   Java大联盟

  帮助万千Java学习者持续成长

关注

efec115db135802dfe4ee164270ddfd0.png

作者 | 狂乱的贵公子

cnblogs.com/cjsblog/p/8946768.html

1、背景介绍

开发过程中,后台的参数校验是必不可少的,所以经常会看到类似下面这样的代码。
c548c99f0188035bf1359e14013ab303.png
这样写并没有什么错,还挺工整的,只是看起来不是很优雅而已。 接下来,用Validation来改写这段。

2、Spring Boot文档中的Validation

在 Spring Boot 的官网中,关于Validation只是简单的提了一句,如下
6cc93e36357c3167c74554a1d576edb5.png
其实,Spring Validator 和Hibernate Validator是两套Validator,可以混着用,这里我们用Hibernate Validator。 1、引入spring-boot-starter-validation
f114bdfbb5c0bf1c67929b79cf27959e.png

2、定义一个对象

f36695c998c7ee7a012ec6eddf3fbd3c.png

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

50f2b6f30bf3cbdca23bfd30317c3091.png
注意:
  • 默认情况下,如果校验失败会抛javax.validation.ConstraintViolationException异常,可以用统一异常处理去对这些异常做处理

  • An Errors/BindingResult argument is expected to be declared immediately after the model attribute

4、运行结果。

ab089f0c0831f4ec1af69d1436d4afdf.png
d356a8ad6da063e94749cacb0d3d1b0e.png
如果在校验的对象后面再加上Model对象的话,如果返回的是ModelAndView就可以将这个Model设置到其中,这样在页面就可以取到错误消息了
7ac097ea435fae3cc7d29fccab5757bd.png
仅仅只是单字段校验的话未免也太不灵活了吧,如果字段之间有关联关系,那该如何校验呢? 答案是自定义

3、自定义校验规则

https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#validator-customconstraints
100192b63c3d3fac2edaf848753ad1fb.png
这里,以优惠券创建为例来演示如何自定义校验规则, 首先,优惠券表单如下(仅仅只是演示用):
73f0a4c7fb70667d91e6625100d324ff.png
这里除了自定义了两条校验规则之外,还用到了分组。 为什么要有分组这一说呢? 因为,举个例子,添加的时候不需要校验 id,而修改的时候 id 不能为空,有了分组以后,就可以添加的时候校验用组 A,修改的时候校验用组 B, 下面重点看一下@CheckTimeInterval。 第一步 、定义一个注解叫CheckTimeInterval。
1c2157dabd28b30c99afdb8017e67979.png
第二步 、定义Validator去校验它。
a3f962089b81795bca2ee667a8fa4e82.png
顺便提一句,这里 BeanWrapper 去取对象的属性值,我们稍微看一下 BeanWrapper 是做什么的。
46a23f774866101baca352b40249f49a.png
a01c25a8adb958516e410f2ae629cb28.png
第三步 、验证。
1b0d207f0b68bbb2f478e166cdff0cec.png
64a4baa9a7c9fa4994163358da61c782.png
73e949734ceadea3fe99384beef19b0b.png
看,自定义的校验生效了。

4、校验模式

https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-fail-fast 下面补充一点,关于校验模式, 默认会校验完所有属性,然后将错误信息一起返回,但很多时候不需要这样,一个校验失败了,其它就不必校验了 为此,需要这样设置。
facb088555e6c610b829f431b0f91ea4.png

1、单个参数校验

77c8b75e4b8b29288cb1c3d7446d4cb4.png
8d76a85ab4f09dbc7ea69696dcd79aa7.png
74782c87f6aab914ffda8ad1a99993db.png
如果是调整页面的时候参数校验失败的话,这时可以不做处理,让其调到错误页面。 如果是接口参数校验失败的话,可以在这里进行统一处理,并返回。 例如:
5a27c4af4f6574d8cbd56f219b41c174.png

2、错误页面

3dfa6b8d77bed444086dab5faeddf809.png
9bd36d27266d40bafacb590d0188ba20.png
以刚才优惠券详情为例 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 推荐阅读

1、一次性把JVM讲清楚,别再被面试官问住了

2、Spring Boot源码解析

3、一文搞懂前后端分离

4、快速上手Spring Boot+Vue前后端分离

博主简介 : 楠哥,资深 Java 工程师,微信号 nnsouthwind,《Java 零基础实战》一书作者,今日头条认证大 V,GitChat 认证作者,B 站 UP 主(楠哥教你学 Java),致力于帮助万千 Java 学习者持续成长。

18e1452d04957afaab16c90e981740a4.png

有收获,就 在看   28f922e926417faa735a5ce59e5f05a3.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值