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

 更新时间:2019年06月04日 09:25:41   作者:废物大师兄  
这篇文章主要介绍了Spring Boot 参数校验的具体实现方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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

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

相关文章

  • 使用jenkins配置maven和JDK

    使用jenkins配置maven和JDK

    这篇文章主要介绍了使用jenkins配置maven和JDK问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • ehcache模糊批量移除缓存的方法

    ehcache模糊批量移除缓存的方法

    本篇文章主要介绍了ehcache模糊批量移除缓存的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Reactor 多任务并发执行且结果按顺序返回第一个

    Reactor 多任务并发执行且结果按顺序返回第一个

    这篇文章主要介绍了Reactor 多任务并发执行且结果按顺序返回第一个,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-09-09
  • SpringBoot中的YAML配置文件和日志详解

    SpringBoot中的YAML配置文件和日志详解

    这篇文章主要介绍了SpringBoot中的YAML配置文件和日志的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • 关于Spring配置文件加载方式变化引发的异常详解

    关于Spring配置文件加载方式变化引发的异常详解

    这篇文章主要给大家介绍了关于Spring配置文件加载方式变化引发的异常的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用Spring具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • JAVA实现的CrazyArcade泡泡堂游戏

    JAVA实现的CrazyArcade泡泡堂游戏

    CrazyArcade泡泡堂游戏,一款用Java编写的JavaSwing游戏程序。 使用了MVC模式,分离了模型、视图和控制器,使得项目结构清晰易于扩展,使用配置文件来设置游戏基本配置,扩展地图人物道具等。同时,该程序编写期间用了单例模式、工厂模式、模板模式等设计模式。
    2021-04-04
  • Java开发中常用记录

    Java开发中常用记录

    这篇文章主要介绍了Java-编程式事务、Java-Stream、Linux常用命令,需要的朋友可以参考下
    2023-05-05
  • java后端pageHelper分页实现方法步骤

    java后端pageHelper分页实现方法步骤

    这篇文章主要给大家介绍了关于java后端pageHelper分页实现方法的相关资料,在我们的Java项目中分页是必不可少的数据展示页面,文中通过图文以及示例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • Spring加载属性文件方式(自动加载优先级问题)

    Spring加载属性文件方式(自动加载优先级问题)

    这篇文章主要介绍了Spring加载属性文件方式(自动加载优先级问题),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • spring为类的静态属性实现注入实例方法

    spring为类的静态属性实现注入实例方法

    在本篇文章里小编给大家整理的是关于spring为类的静态属性实现注入实例方法,有需要的朋友们可以参考下。
    2019-10-10

最新评论