案例说明——后端校验注册表单字段
在编写注册功能时,需要考虑字段校验的情况,这时候可以采用 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会抛出异常,通常可以通过全局异常处理器进行处理。