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会抛出异常,通常可以通过全局异常处理器进行处理。

相关推荐
神奇小汤圆1 分钟前
Spring Boot请求处理组件对比详解
后端
AI人工智能+电脑小能手2 分钟前
【大白话说Java面试题 第190题】【08_Kafka篇】第6题:消息队列有什么作用?
java·kafka·消息队列·系统设计·分布式架构
蚰蜒螟12 分钟前
一次 Spring AOP 与定时任务引发的死锁排查实录
java·spring·firefox
TeamDev12 分钟前
JxBrowser 9.3.1 版本发布啦!
java·前端·javascript·c#·混合应用·jxbrowser·浏览器控件
dankokoko15 分钟前
一.函数与极限2
学习
颜酱17 分钟前
03 | 实现节点1 — 抽取关键词
前端·人工智能·后端
知识分享小能手21 分钟前
统计学学习教程,从入门到精通,分类数据分析 — 知识点详解(14)
学习·分类·数据分析
qq_4523962325 分钟前
第五篇:《接口与错误处理:Go 的哲学》
开发语言·后端·golang
Java爱好狂.30 分钟前
Java就业需要学习哪些内容?
spring·程序员·springboot·架构师·java面试·java面试题·java八股文
程序猿乐锅1 小时前
【数据结构与算法 | 第六篇】力扣1109,1094差分数组
java·算法·leetcode