SpringBoot之Hibernate-Validator数据校验
官方参考文档:点我跳转
1.新版本的SpringBoot需要手动引入依赖,这里以SpringBoot2.6.7为例子引入,在pom.xml
中
<!--Hibernate-Validator 数据校验-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2.在实体类中使用,给字段加上Hibernate-Validator校验注解。
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.因为使用的分组约束,需创建一个分组类
public interface AddGroup {
}
4.为了方便使用,创建一个校验工具类
/**
* 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.使用方法
//数据校验
ValidatorUtils.validateEntity(classesType, AddGroup.class);
一些常用的注解
注解 | 作用类型 | 说明 |
---|---|---|
字符串 | 被注释的元素必须是电子邮箱地址 | |
@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 | 日期 | 被注释的元素必须是一个过去的日期 |