前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot 参数校验详解

Spring Boot 参数校验详解

作者头像
南风
发布2020-01-15 16:04:28
1.2K0
发布2020-01-15 16:04:28
举报
文章被收录于专栏:Java大联盟Java大联盟

作者 | 狂乱的贵公子

cnblogs.com/cjsblog/p/8946768.html

1、背景介绍

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

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

接下来,用Validation来改写这段。

2、Spring Boot文档中的Validation

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

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

1、引入spring-boot-starter-validation

2、定义一个对象

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

注意:

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

4、运行结果。

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

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

3、自定义校验规则

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

这里,以优惠券创建为例来演示如何自定义校验规则,首先,优惠券表单如下(仅仅只是演示用):

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

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

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

第二步 、定义Validator去校验它。

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

第三步 、验证。

看,自定义的校验生效了。

4、校验模式

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

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

为此,需要这样设置。

1、单个参数校验

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

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

2、错误页面

以刚才优惠券详情为例

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 学习者持续成长。

有收获,就点个在看

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java大联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2、Spring Boot文档中的Validation
    • 2、定义一个对象
      • 3、适用@Valid校验,并将校验结果放到BindingResult对象中
        • 4、运行结果。
          • 3、自定义校验规则
            • 4、校验模式
              • 1、单个参数校验
                • 2、错误页面
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档