参数幂等性校验失败_快速入手 Spring Boot 参数校验
- 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 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 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/79970590blog.csdn.net
来源:http://t.cn/EoOBjPQ
参数幂等性校验失败_快速入手 Spring Boot 参数校验相关推荐
- @valid 校验_一文带你快速入手 Spring Boot 参数校验
点击上方"Java专栏",选择"置顶或者星标" 第一时间阅读精彩文章! ☞ 程序员进阶必备资源免费送「21种技术方向!」 点击查看☜ 作者:狂乱的贵公子 来源: ...
- 快速上手 Spring Boot 项目开发
1. 从零开始 Spring Boot 工程 Spring Boot 可以快速构建基于 Spring 框架的 JavaWeb 应用,快速整合包括视图层.MVC架构以及持久化层在内的各种框架,不需 ...
- 使用Spring Initializer快速创建Spring Boot项目
使用Spring Initializer快速创建Spring Boot项目 1.IDEA:使用 Spring Initializer快速创建项目 IDE都支持使用Spring的项目创建向导快速创建一个 ...
- java5分钟项目讲解_5分钟快速创建spring boot项目的完整步骤
前言 上一篇博客说了如何创建spring boot项目,但是有些同学会觉得有点麻烦,有没有什么快速学会能快速创建spring boot项目的方法,答案是肯定的.接下来我们就一起来快速创建一个sprin ...
- Spring基础:快速入门spring boot(7):spring boot 2.0简单介绍
从这篇文章开始以spring boot2为主要版本进行使用介绍. Spring boot 2特性 spring boot2在如下的部分有所变化和增强,相关特性在后续逐步展开. 特性增强 基础组件升级: ...
- Spring Boot参数校验以及分组校验的使用
简介:做web开发基本上每个接口都要对参数进行校验,如果参数比较少,还比较容易处理,一但参数比较多了的话代码中就会出现大量的if-else语句.虽然这种方式简单直接,但会大大降低开发效率和代码可读性. ...
- Spring Boot参数校验
1. 概述 作为接口服务提供方,非常有必要在项目中加入参数校验,比如字段非空,字段长度限制,邮箱格式验证等等,数据校验常用到概念: JSR303/JSR-349: JSR303是一项标准,只提供规范不 ...
- spring boot参数校验 告别校验胶水代码
springboot进行参数校验 文章目录 前言 普通的逻辑代码校验 PathVariable 路径变量校验 JSR规范是什么? springboot-JSR303参数校验 引入参数校验依赖 官网 ...
- Spring boot 参数校验
2019独角兽企业重金招聘Python工程师标准>>> 转载 http://www.cnblogs.com/bianzy/p/6639799.html SpringBoot在内部通 ...
最新文章
- 《从问题到程序:用Python学编程和计算》——3.4 定义函数
- MIT工程师利用人工大脑突触(忆阻器)设计了“脑芯片“,未来可用于便携式设备
- 实验三进程调度模拟程序
- java 中 return 的两种常见的用法
- (一)Mac OS安装PostgreSQL数据库
- python学习HTML之CSS(2)
- Quartz2D知识点聚合案例
- Redis在.net中的应用学习
- js一键批量打印_前端连接打印机批量打印pdf格式的文件
- html站点地图怎么做,网站地图(站点地图)详细介绍、以及如何制作详解
- [整站源码]thinkphp古筝古琴书画培训类网站模板+前后端源码
- DeepMind再爆性骚扰丑闻!内部邮件泄露,色狼自夸猛男
- html视频不播放视频教程,html无法播放视频怎么办
- 大话西游精彩影评(二)
- 大学计算机打算及目的,大学生计算机实习目的和要求
- 大数据时代_如何构建国家地质基础数据更新体系
- 郭昌洪畅谈—物业管理工作三大论述
- 广东水利电力计算机系宿舍图,广东水利电力职业技术学院宿舍条件怎么样宿舍图片内景...
- LoadRunner下载文件脚本
- 橄榄山+住建部BIM数据库:
热门文章
- sql行转列 列数据不定 sql交叉报表实例
- Partition Array by Odd and Even
- 主网上线也不开心,EOS背后公司被钓鱼
- vue 跨域:使用vue-cli 配置 proxyTable 实现跨域问题
- 很喜欢VS.NET 2003对条件编译的代码提示
- 使用Xamarin.Forms的企业应用程序模式(电子书)--访问远程数据
- maven jetty
- C Primer Plus 第9章 函数 9.4 多源代码文件程序的编译
- ACL访问控制列表【笔记|实验】
- Android+clipse导入工程提示:invalid project description