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

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

1、背景介绍

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

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

接下来,用Validation来改写这段

2、Spring Boot文档中的Validation

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

其实,Spring ValidatorHibernate 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 attribute

5.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://blog.csdn.net/qq_27680317/article/details/79970590​blog.csdn.net

来源:http://t.cn/EoOBjPQ

参数幂等性校验失败_快速入手 Spring Boot 参数校验相关推荐

  1. @valid 校验_一文带你快速入手 Spring Boot 参数校验

    点击上方"Java专栏",选择"置顶或者星标" 第一时间阅读精彩文章! ☞ 程序员进阶必备资源免费送「21种技术方向!」 点击查看☜ 作者:狂乱的贵公子 来源: ...

  2. 快速上手 Spring Boot 项目开发

    1. 从零开始 Spring Boot 工程    Spring Boot 可以快速构建基于 Spring 框架的 JavaWeb 应用,快速整合包括视图层.MVC架构以及持久化层在内的各种框架,不需 ...

  3. 使用Spring Initializer快速创建Spring Boot项目

    使用Spring Initializer快速创建Spring Boot项目 1.IDEA:使用 Spring Initializer快速创建项目 IDE都支持使用Spring的项目创建向导快速创建一个 ...

  4. java5分钟项目讲解_5分钟快速创建spring boot项目的完整步骤

    前言 上一篇博客说了如何创建spring boot项目,但是有些同学会觉得有点麻烦,有没有什么快速学会能快速创建spring boot项目的方法,答案是肯定的.接下来我们就一起来快速创建一个sprin ...

  5. Spring基础:快速入门spring boot(7):spring boot 2.0简单介绍

    从这篇文章开始以spring boot2为主要版本进行使用介绍. Spring boot 2特性 spring boot2在如下的部分有所变化和增强,相关特性在后续逐步展开. 特性增强 基础组件升级: ...

  6. Spring Boot参数校验以及分组校验的使用

    简介:做web开发基本上每个接口都要对参数进行校验,如果参数比较少,还比较容易处理,一但参数比较多了的话代码中就会出现大量的if-else语句.虽然这种方式简单直接,但会大大降低开发效率和代码可读性. ...

  7. Spring Boot参数校验

    1. 概述 作为接口服务提供方,非常有必要在项目中加入参数校验,比如字段非空,字段长度限制,邮箱格式验证等等,数据校验常用到概念: JSR303/JSR-349: JSR303是一项标准,只提供规范不 ...

  8. spring boot参数校验 告别校验胶水代码

    ​ springboot进行参数校验 文章目录 前言 普通的逻辑代码校验 PathVariable 路径变量校验 JSR规范是什么? springboot-JSR303参数校验 引入参数校验依赖 官网 ...

  9. Spring boot 参数校验

    2019独角兽企业重金招聘Python工程师标准>>> 转载  http://www.cnblogs.com/bianzy/p/6639799.html SpringBoot在内部通 ...

最新文章

  1. 《从问题到程序:用Python学编程和计算》——3.4 定义函数
  2. MIT工程师利用人工大脑突触(忆阻器)设计了“脑芯片“,未来可用于便携式设备
  3. 实验三进程调度模拟程序
  4. java 中 return 的两种常见的用法
  5. (一)Mac OS安装PostgreSQL数据库
  6. python学习HTML之CSS(2)
  7. Quartz2D知识点聚合案例
  8. Redis在.net中的应用学习
  9. js一键批量打印_前端连接打印机批量打印pdf格式的文件
  10. html站点地图怎么做,网站地图(站点地图)详细介绍、以及如何制作详解
  11. [整站源码]thinkphp古筝古琴书画培训类网站模板+前后端源码
  12. DeepMind再爆性骚扰丑闻!内部邮件泄露,色狼自夸猛男
  13. html视频不播放视频教程,html无法播放视频怎么办
  14. 大话西游精彩影评(二)
  15. 大学计算机打算及目的,大学生计算机实习目的和要求
  16. 大数据时代_如何构建国家地质基础数据更新体系
  17. 郭昌洪畅谈—物业管理工作三大论述
  18. 广东水利电力计算机系宿舍图,广东水利电力职业技术学院宿舍条件怎么样宿舍图片内景...
  19. LoadRunner下载文件脚本
  20. 橄榄山+住建部BIM数据库:

热门文章

  1. sql行转列 列数据不定 sql交叉报表实例
  2. Partition Array by Odd and Even
  3. 主网上线也不开心,EOS背后公司被钓鱼
  4. vue 跨域:使用vue-cli 配置 proxyTable 实现跨域问题
  5. 很喜欢VS.NET 2003对条件编译的代码提示
  6. 使用Xamarin.Forms的企业应用程序模式(电子书)--访问远程数据
  7. maven jetty
  8. C Primer Plus 第9章 函数 9.4 多源代码文件程序的编译
  9. ACL访问控制列表【笔记|实验】
  10. Android+clipse导入工程提示:invalid project description