Spring Boot 参数校验的具体实现方式

所属分类: 软件编程 / java 阅读数: 46
收藏 0 赞 0 分享

1、背景介绍

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

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

接下来,用Validation来改写这段

2、Spring Boot文档中的Validation

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

其实,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

5.2、定义一个对象

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

注意:

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

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

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

5.5、自定义校验规则

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

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

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

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

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

下面重点看一下@CheckTimeInterval

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

第二步、定义Validator去校验它

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

言归正传

第三步、验证

看,自定义的校验生效了

6、补充

6.1、校验模式

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

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

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

为此,需要这样设置

6.2、单个参数校验

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

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

6.3、错误页面

以刚才优惠券详情为例

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://www.jb51.net/article/155033.htm

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

java实现背单词程序

这篇文章主要为大家详细介绍了java实现背单词程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

java实现单词查询小程序

这篇文章主要为大家详细介绍了java实现单词查询小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java程序开发环境配置图文教程

这篇文章主要为大家详细介绍了Java程序开发环境配置图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

详解ssh框架原理及流程

在本文中小编给大家整理的是关于ssh框架原理及流程的相关知识点内容,有此需要的朋友们可以学习下。
收藏 0 赞 0 分享

Java实现弹窗效果的基本操作

这篇文章主要为大家详细介绍了Java实现弹窗效果的基本操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

详解springmvc常用5种注解

在本篇里我们给大家总结了关于springmvc常用5种注解相关知识点以及实例代码,需要的朋友们参考下。
收藏 0 赞 0 分享

Java实现弹窗效果的基本操作(2)

这篇文章主要为大家详细介绍了Java实现弹窗效果的基本操作第二篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Spring Boot假死诊断实战记录

这篇文章主要给大家介绍了关于Spring Boot假死诊断的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

Java计时新姿势StopWatch详解

这篇文章主要介绍了Java计时新姿势StopWatch,最近公司来了个大佬,从他那里学到不少东西,其中一个就是计时的新姿势「StopWatch」,需要的朋友可以参考下
收藏 0 赞 0 分享

java实现点击按钮弹出新窗体功能

这篇文章主要为大家详细介绍了java实现点击按钮弹出新窗体功能,旧窗体不进行操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多