SpringBoot之Hibernate-Validator数据校验

SpringBoot之Hibernate-Validator数据校验。验证数据是贯穿所有应用程序层(从表示层到持久层)的常见任务。通常在每个层中实现相同的验证逻辑,这是耗时且容易出错的。为了避免重复这些验证,开发人员通常将验证逻辑直接绑定到域模型中,用验证代码将域类弄乱,而验证代码实际上是关于类本身的元数据。官方参考文档:点我跳转

1.新版本的SpringBoot需要手动引入依赖,这里以SpringBoot2.6.7为例子引入,在pom.xml

1
2
3
4
5
<!--Hibernate-Validator 数据校验-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2.在实体类中使用,给字段加上Hibernate-Validator校验注解。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ClassesTypeEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 班次类型名称,这里分组约束
*/
@NotBlank(message = "班次类型名称不能为空",groups = AddGroup.class)
private String classesTypeName

@NotEmpty(message = "姓名不能空")
private String name;

@NotNull(message = "年龄不能为空")
@Range(min = 0, max = 200, message = "年龄不合法")
private Integer age;

}

3.因为使用的分组约束,需创建一个分组类

1
2
public interface AddGroup {
}

4.为了方便使用,创建一个校验工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
* hibernate-validator校验工具类
*
* 参考文档:http://docs.jboss.org/hibernate/validator/5.4/reference/en-US/html_single/
*
*/
public class ValidatorUtils {
private static Validator validator;

static {
validator = Validation.buildDefaultValidatorFactory().getValidator();
}

/**
* 校验对象
* @param object 待校验对象
* @param groups 待校验的组
* @throws RRException 校验不通过,则报RuntimeException异常
*/
public static void validateEntity(Object object, Class<?>... groups)
throws RuntimeException {
Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object, groups);
if (!constraintViolations.isEmpty()) {
StringBuilder msg = new StringBuilder();
for(ConstraintViolation<Object> constraint: constraintViolations){
msg.append(constraint.getMessage()).append("<br>");
}
throw new RuntimeException(msg.toString());
}
}
}

5.使用方法

1
2
//数据校验
ValidatorUtils.validateEntity(classesType, AddGroup.class);

一些常用的注解

注解 作用类型 说明
@Email 字符串 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 字符串 被注释的字符串的大小必须在指定的范围内,min 代表最小,max代表最大
@NotEmpty 字符串 被注释的字符串必须非空
@NotBlank(message =) 字符串 验证字符串非null,且长度必须大于0
@NotEmptyPattern 字符串 在字符串不为空的情况下,是否匹配正则表达式
@DateValidator 字符串 验证日期格式是否满足正则表达式,Local为英语
@DateFormatCheckPattern 字符串 验证日期格式是否满足正则表达式,Local是自己手动指定的
@Range(min=,max=,message=) 字符串、数值类型、字节等 被注释的元素必须在合适的范围内
@NotNull 任意 被注释的元素必须为null
@AssertTrue 布尔值 被注释的元素必须为true
@AssertFalse 布尔值 被注释的元素必须为false
@Min(value) 数字 被注释的元素必须是一个数字,且大于或等于指定的最小值
@Max(value) 数字 被注释的元素必须是一个数字,且小于或等于指定的最大值
@DecimalMin(value) 数字 被注释的元素必须是一个数字,且大于或等于指定的最小值
@DecimalMax(value) 数字 被注释的元素必须是一个数字,且小于或等于指定的最大值
@Size(max=, min=) 数字 被注释的元素必须是一个数字,min代表最小,max代表最大
@Digits (integer, fraction) 数字 被注释的元素必须是一个数字,且在可接收的范围内
@Past 日期 被注释的元素必须是一个过去的日期