快速入手 Spring Boot 参数校验

Spring Boot 实现各种参数校验 业务需求总是比框架提供的这些简单校验要复杂的多,我们可以自定义校验来满足我们的需求。自定义约束注解String message() default "加密id格式错误";Class 阅读详情

点击上方“芋道源码”,选择“设为星标”

做积极的人,而不是积极废人!

源码精品专栏

 

来源:狂乱的贵公子 cnblogs.com/cjsblog/p/8946768.html

  • 1、背景介绍

  • 2、Spring Boot文档中的Validation

  • 3、Hibernate Validator

  • 4、Spring Validator

  • 5、示例

  • 6、补充

  • 参考


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/#p-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.youkuaiyun.com/qq_27680317/article/details/79970590

参考

http://rensanning.iteye.com/blog/2357373

https://blog.youkuaiyun.com/kenight/article/details/77774465

https://www.cnblogs.com/mr-yang-localhost/p/7812038.html

https://www.phpsong.com/3567.html

https://www.cnblogs.com/mr-yang-localhost/p/7812038.html



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:

已在知识星球更新源码解析如下:


最近更新《芋道 SpringBoot 2.X 入门》系列,已经 20 余篇,覆盖了 MyBatis、Redis、MongoDB、Elasticsearch、分库分表、读写分离、SpringMVC、SpringWebflux、WebSocket、Dubbo、RocketMQ、Kafka、性能测试等等内容。

提供近 2W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

如果你喜欢这篇文章,喜欢,转发。

生活很美好,明天见(。・ω・。)ノ♡

Spring Boot 参数校验 Validation 使用 1. 基于 Bean Validation 标准:Spring Validation 是基于 Bean Validation 标准的参数校验框架,可以实现对 Java Bean 属性和方法参数的校验,提供了一套完整的校验规范和 API,可以很方便地进行扩展和定制。 2. 支持多种校验注解:Spring Validation 支持多种校验注解,比如 @NotNull、@Size、@Min、@Max 等,可以满足不同的校验需求,同时也支持自定义校验注解。 3. 集成方便:Spring Validation 是 阅读详情

相关推荐

学习stm32H7之路开始(STM32H7系列1) 前期准备,HAL库框架

2020.01.07 几个重要的参考网址 1.电子工程世界网 http://tags.eeworld.com.cn/tags/STM32H7 链接: link. 2.转:https://blog.youkuaiyun.com/simon223/article/list/2?t=1 链接: link. ———————————————— 版权声明:本文为优快云博主「Simon223」的原创文章,遵循 CC 4....

kengkengkeng963的博客 3414

springboot中参数校验(validation)使用

文章目录介绍:validation引入可用约束(constraint)应用实战实体类接口参数型约束生效实体型 介绍: 在开发中,会经常需要进行参数的校验,比如接口层、业务层、持久层等,其中接口的参数校验就是最为常见的。这里就来看一下springboot中参数校验(validation)的使用。 validation引入 在springboot官方文档上对validation的使用介绍中,说明了只要JSR-303实现(例如Hibernate验证器)在类路径上,Bean Validation 1.1支持的方法验

weixin_44566662的博客 3883

华为HPLC模组全拆解之电力载波收发原理分析

电力线载波通信(PLC)是一种使用电力线进行数据传输的通信技术,即利用现有电网作为信号的传输介质,使电网在传输电力的同时可以进行数据传输。目前根据所用频段的不同,低压电力线载波通信一般分为窄带电力线载波通信(10KHz~500KHz)和宽带电力线载波通信(2MHz~20MHz)。这里的频率可以简单理解为单片机串口的通信波特率,频率越小通信速度越慢,频率越大通信速度越快。为了研究电力载波通信原理,笔者以华为的一款宽带电力载波模组为例进行详细的分析,该模组主控采用的是海思芯片,型号为Hi3921EV100。

xingxingdiandeng69的博客 2万+

芋道 Spring Boot 参数校验 Validation 入门

点击上方“芋道源码”,选择“设为星标”做积极的人,而不是积极废人!源码精品专栏原创 | Java 2020 超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络...

芋艿V 1138

solidworks vba二次开发配合问题

solidworks vba二次开发配合问题二次开发装配的步骤 二次开发装配的步骤 solidworks可以使用宏录制配合过程从而得到配合的vba代码,步骤如下: 1.选择两个配合的面(点、线等) 2. 建立配合 例如将两个圆柱面同心(图中高亮): 配合后 我们看一下宏录制的代码: Sub main() //激活solidworks接口 Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc //选择两个圆柱面,注意此处是根据坐标选择,不

Alejandro123的博客 3407

【unity游戏开发入门到精通——UGUI】文本控件 —— TextetMeshPro新文本控件(TextMeshPro - Text(UI)和TextMeshPro - Text)

文本组件是UGUI中最常用的组件,它的作用是对文本数据进行处理并显示。UGUI的文本组件可以分两为种——Text旧文本控件、TextMeshPro新文本组件。本文主要是介绍TextMeshPro新文本控件,而TextMeshPro新文本控件又可以分为两种——TextMeshPro - Text(UI)和TextMeshPro - Text。TextMeshPro是Unity收购的一个第三方插件,现在已经自动内置到编辑器中,只要使用一次就会自动导入到工程。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3770

SpringBoot 轻松搞定数据验证 (一)

感谢作者: http://www.spring4all.com/article/1224对于任何一个应用而言,客户端做的数据有效性验证都不是安全有效的,而数据验证又是一个企业级项目架构上最为基础的功能模块,这时候就要求我们在服务端接收到数据的时候也对数据的有效性进行验证。为什么这么说呢?往往我们在编写程序的时候都会感觉后台的验证无关紧要,毕竟客户端已经做过验证了,后端没必要在浪费资源对数据进行验证...

有天你会让我妒忌的 2万+

(BS ISO 11898-1:2015)CAN_FD 总线协议详解1- 基本概念描述

本文对can总线协议做了详细的讲解,can协议里面的每一个知识点都做了详细且举一反三的论述,读了本文可以不用读can协议了。

zhangziranzm的博客 2315

springboot中@Valid使用

日常接口中,我们需要校验字符串是否为空等操作,需要在接口中使用StringUtils.isBlank(str)之类的方法校验,但 是如果过多的字符串,我们需要些大量的校验代码,代码十分臃肿繁琐无味,现在,我们把这项工作交给spring 去做。使用@Valid去校验。 首先我们使用一个实体类接收接口中传入的参数。 实体类如下: public class ResultInput { /** ...

Jerry-blog 8022

宇树G1外接麦克风实现音频采集实战

本文介绍如何使用Python为Unitree G1机器人实现外接麦克风音频采集功能。代码提供了AudioRecorder类,支持通过arecord命令进行音频录制,主要功能包括:1)配置音频设备参数(采样率、声道数);2)启动/停止录音;3)检查录音状态。使用前需确保麦克风正确连接并获取设备编号。该方案采用subprocess管理录音进程,支持正常终止和强制停止,输出为WAV格式文件。示例代码展示了10秒录音的完整流程。

m0_47999117的博客 656

springboot 使用校验框架validation校验

b/s系统中对http请求数据的校验多数在客户端进行,这也是出于简单及用户体验性上考虑,但是在一些安全性要求高的系统中服务端校验是不可缺少的。 Spring3支持JSR-303验证框架,JSR-303 是Java EE 6 中的一项子规范,叫做BeanValidation,官方参考实现是hibernate Validator(与Hibernate ORM 没有关系),JSR 303 用于对J

哎幽的成长 7万+

Dify 第 3 篇 Dify 入门示例 - 聊天助手

本文介绍了如何使用Dify平台快速搭建一个聊天助手。首先通过创建空白应用并选择"聊天助手"模板完成基础设置,然后安装配置通义千问等大语言模型(LLM)并设置API密钥。进阶部分演示了如何创建支持编程语言选择的代码解释器,包括添加提示词约束、插入变量、设置开场白等功能。最后展示了运行效果:用户可选择编程语言后输入代码,系统会给出相应解释。文章还提到应用支持发布共享,并附有Dify官方文档参考链接。

甘蓝的专栏 865

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

1、背景介绍2、Spring Boot文档中的Validation3、Hibernate Validator4、Spring Validator5、示例6、补充《Netty 实现原理与源码解析 —— 精品合集》《Spring 实现原理与源码解析 —— 精品合集》《MyBatis 实现原理与源码解析 —— 精品合集》《Spring MVC 实现原理与源码解析 —— 精品合集》《Spring Boot...

weixin_35710158的博客 491

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

springboot 优雅的参数校验_快速入手 Spring Boot 参数校验

1、背景介绍2、Spring Boot文档中的Validation3、Hibernate Validator4、Spring Validator5、示例6、补充1、背景介绍开发过程中,后台的参数校验是必不可少的,所以经常会看到类似下面这样的代码img这样写并没有什么错,还挺工整的,只是看起来不是很优雅而已。接下来,用Validation来改写这段2、Spring Boot文档中的Validatio...

weixin_39999116的博客 92

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

一文带你快速入手 Spring Boot 参数校验

作者:狂乱的贵公子来源:cnblogs.com/cjsblog/p/8946768.html1、背景介绍2、Spring Boot文档中的Validation3、Hibernate V...

程序员大宇 131

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

点击上方“Java专栏”,选择“置顶或者星标”第一时间阅读精彩文章!☞ 程序员进阶必备资源免费送「21种技术方向!」 点击查看☜作者:狂乱的贵公子来源:cnblogs.com/cjsblog/p/8946768.html1、背景介绍2、Spring Boot文档中的Validation3、Hibernate Validator4、Spring Validator5、示例6、补充参考1、...

weixin_34587698的博客 231

返回的html页面携带参数_快速入手 Spring Boot 参数校验

点击上方Java后端,选择设为星标优质文章,及时送达来源 |狂乱的贵公子链接 | cnblogs.com/cjsblog/p/8946768.html1、背景介绍开发过程中,后台的参数校验是必不可少的,所以经常会看到类似下面这样的代码这样写并没有什么错,还挺工整的,只是看起来不是很优雅而已。接下来,用Validation来改写这段2、Spring Boot文档中的Validatio...

weixin_42299566的博客 651

java fileinputstream 安全管理器校验失败_快速入手 Spring Boot 参数校验

1、背景介绍2、Spring Boot文档中的Validation3、Hibernate Validator4、Spring Validator5、示例6、补充参考《Java 2019 超神之路》《Dubbo 实现原理与源码解析 —— 精品合集》《Spring 实现原理与源码解析 —— 精品合集》《MyBatis 实现原理与源码解析 —— 精品合集》《Spring MVC 实现原理与源码解析 ——...

weixin_39783156的博客 254

Spring Boot 参数校验

如果后端未做参数校验的话,会使未经校验的参数经过service层来到dao层直至数据库,造成十分严重的后果。

码刀攻城 1908

Spring Boot项目参数校验实战详解

本文介绍了Spring Boot Validation在参数校验中的应用。通过spring-boot-starter-validation可以简化校验流程,提供声明式校验、统一错误处理等功能,帮助开发者构建更健壮的系统。

土豆丝的博客 1399

Spring Boot 参数校验 Validation 终极指南

注解使用场景抛出异常@Valid校验对象参数(如 @RequestBody)@Validated校验简单类型参数(如 @RequestParam)@Validated校验对象参数(需配合 @Valid 使用)在大多数项目中,无论是 Bean Validation 定义的约束,还是 Hibernate Validator 附加的约束,都是无法满足我们复杂的业务场景。所以,我们需要自定义约束。1)编写自定义约束的注解;2)编写自定义的校验器 ConstraintValidator。

〆、挽风的博客 2183

Spring Boot的参数校验使用方法

Spring Boot参数校验的使用方法主要包括引入依赖、使用注解进行标注、在Controller层进行校验、以及定义异常处理类来处理校验异常等步骤。以下是具体说明:引入依赖:需要引入spring-boot-starter-validation依赖,以获得参数校验的功能支持。使用注解进行标注:在需要进行校验的参数上添加相应的校验注解,如@NotNull、@Min、@Max等,来指明参数的合法性要求。

2301_76419561的博客 2700
上一篇: 可能是国内最好的网关开源项目,支持 Dubbo、SpringCloud,经历多年双11高并发的场景验证...
下一篇: 7000 字读懂互联网公司的架构演变历程
公众号-芋道源码
博客等级 码龄10年 1636粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值