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 验证对象是否为null Java对象
@NotNull 验证对象是否不为null Java对象(不适用于基本数据类型包装类的空字符串)
@NotBlank 检查字符串是否不为null、空字符串或只包含空格 String
@NotEmpty 检查集合、数组、String、Map等是否不为null或空 Collection, Array, String, Map等
@Size(min, max) 验证对象(Array, Collection, Map, String)长度是否在给定的范围之内 Array, Collection, Map, String
@AssertTrue 验证Boolean对象是否为true Boolean
@AssertFalse 验证Boolean对象是否为false Boolean
@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会抛出异常,通常可以通过全局异常处理器进行处理。

相关推荐
疯一样的码农13 分钟前
Spring Boot Starter Parent介绍
java·spring boot·后端
iQM7515 分钟前
Spring Boot集成RBloomFilter快速入门Demo
java·spring boot·spring
爱上语文18 分钟前
Springboot 阿里云对象存储OSS 工具类
java·开发语言·spring boot·后端·阿里云
小黑0321 分钟前
Scala第三天
开发语言·后端·scala
代码代码快快显灵3 小时前
java之异常处理
java·开发语言
五羟基己醛4 小时前
【学习笔记】SquareLine Studio安装教程(LVGL官方工具)
笔记·学习·ui
阿望要努力上研究生5 小时前
若依项目搭建(黑马经验)
java·redis·node.js·maven·管理系统
一只脑洞君5 小时前
Kubernetes(K8s)的简介
java·容器·kubernetes
zygswo5 小时前
程序猿成长之路之设计模式篇——设计模式简介
java·设计模式