当前位置: 首页 > article >正文

Spring Validation —— 参数校验框架

案例说明——后端校验注册表单字段

        在编写注册功能时,需要考虑字段校验的情况,这时候可以采用 Spring提供的一套参数校验框架工具——Spring Validation。一下是使用的步骤:

1. 导入validation坐标

2. 在参数上添加 @Pattern注解,指定校验规则

3. 在controller类上添加@Validated注解

4. 在全局异常处理器中处理参数校验失败的情况 

 

扩展:Spring Validation教程

一、配置与依赖

依赖引入:对于Spring Boot项目,如果版本小于2.3.x,spring-boot-starter-web会自动引入hibernate-validator依赖。如果版本大于或等于2.3.x,则需要手动引入hibernate-validator依赖。

配置类:在某些情况下,可能需要创建配置类来配置LocalValidatorFactoryBean,以便自定义校验器的注册和校验规则的加载。

二、使用方式

实现Validator接口:通过创建实现Validator接口的类,并在其中定义校验逻辑。然后,在需要校验的对象上使用@Validated注解,并指定校验器类。

使用Bean Validation注解:直接在Java对象的属性上使用Bean Validation提供的注解来定义校验规则。Spring会自动识别这些注解,并在需要时进行校验。

基于方法的校验:在Spring MVC的Controller层,可以使用@Validated注解对方法参数进行校验。如果校验失败,Spring会抛出异常,并可以通过全局异常处理器进行处理。

三、常用注解

以下是将Spring Validation中常用的注解列成表格的形式:

注解描述适用类型
@Null验证对象是否为nullJava对象
@NotNull验证对象是否不为nullJava对象(不适用于基本数据类型包装类的空字符串)
@NotBlank检查字符串是否不为null、空字符串或只包含空格String
@NotEmpty检查集合、数组、String、Map等是否不为null或空Collection, Array, String, Map等
@Size(min, max)验证对象(Array, Collection, Map, String)长度是否在给定的范围之内Array, Collection, Map, String
@AssertTrue验证Boolean对象是否为trueBoolean
@AssertFalse验证Boolean对象是否为falseBoolean
@Past验证Date和Calendar对象是否在当前时间之前Date, Calendar
@Future验证Date和Calendar对象是否在当前时间之后Date, Calendar
@Pattern(regex)验证String对象是否符合正则表达式的规则String
@Min(value)验证Number和String对象是否大于等于指定的值Number, String(转换为Number后比较)
@Max(value)验证Number和String对象是否小于等于指定的值Number, String(转换为Number后比较)
@DecimalMin(value)验证数字字段是否大于等于指定的小数值(支持BigDecimal)BigDecimal, Number, String(转换为BigDecimal后比较)
@DecimalMax(value)验证数字字段是否小于等于指定的小数值(支持BigDecimal)BigDecimal, Number, String(转换为BigDecimal后比较)
@Digits(integer, fraction)验证数字字段的整数部分和小数部分的位数Number, String(转换为Number后校验)
@Range(min, max)确保数字字段在指定范围内(是@Min@Max的组合)Number, String(转换为Number后比较)
@Email确保字段是有效的电子邮件地址String

注意: 这些注解可以直接应用于Java对象的属性上,并通过Spring的校验机制进行验证。在Spring MVC的Controller层,可以通过@Valid@Validated注解来开启对这些注解的校验功能。如果校验失败,Spring会抛出异常,通常可以通过全局异常处理器进行处理。


http://www.kler.cn/news/340801.html

相关文章:

  • Linux系统中,文件和文件夹的权限和所有权核心概念
  • Window系统编程 - 文件操作
  • 国庆档不太热,影视股“凉”了?
  • Win10之Ubuntu22.04(主机)与Virtual-BOX(宿主win10)网络互通调试(七十九)
  • k8s 中存储之 PV 持久卷 与 PVC 持久卷申请
  • 实现std::sort,replace,fill,accumulate,equal等函数
  • MyBatis之TypeHandler的自定义实现
  • Golang | Leetcode Golang题解之第462题最小操作次数使数组元素相等II
  • GNU/Linux - tarball文件介绍介绍
  • C#中Json序列化的进阶用法
  • Spring中注入bean时的scope属性详解、往singleton中注入prototype属性的bean以及Spring使用注解实现AOP切面编程
  • qwt实现码流柱状图多色柱体显示
  • SAP将假脱机(Spool requests)内容转换为PDF文档[RSTXPDFT4]
  • GAMES202作业3
  • 27-云计算下一个十年技术Serverless
  • 阿里140滑块-滑块验证码逆向分析思路学习
  • class 031 位运算的骚操作
  • Spring Boot 整合 Minio
  • JavaScript基础---typeof和instanceof的区别
  • git 相关问题解决一一记录