通过方法去验证实体参数是否正确,这个框架中有很多注解,可以参考我的另一篇博客
依赖:
Javax ValidationI的依赖:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.16.Final</version>
</dependency>
springboot对Javax ValidationI封装,依赖变成
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
简单使用
/**
* 验证测试类
*/
public class ValidationTest {
// 验证器对象
private Validator validator;
// 待验证对象
private UserInfo userInfo;
// 验证结果集合
private Set<ConstraintViolation<UserInfo>> set;
/**
* 初始化操作
*/
@Before
public void init() {
// 初始化验证器
validator = Validation.buildDefaultValidatorFactory()
.getValidator();
// 初始化待验证对象 - 用户信息
userInfo = new UserInfo();
}
/**
* 结果打印
*/
@After
public void print() {
set.forEach(item -> {
// 输出验证错误信息
System.out.println(item.getMessage());
});
}
@Test
public void nullValidation() {
// 使用验证器对对象进行验证
set = validator.validate(userInfo);
}
}
封装成工具:
/**
* @program: test
* @description: 数据验证
* @author: MaoSi-WeiPeng
* @create: 2021-11-24 15:43
**/
@Component
public class ValidateUtil {
private volatile static Validator validator;
private static Validator getValidator() {// 使用spring中定义的factory
if (validator == null) {
synchronized (ValidateUtil.class) {
if (validator == null) {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
}
}
}
return validator;
}
public static <T> void validate(T t) {
Set<ConstraintViolation<T>> constraintViolations = getValidator().validate(t);
if (constraintViolations.size() > 0) {
for (ConstraintViolation<T> constraintViolation : constraintViolations) {
String message = constraintViolation.getMessage();
System.out.println("验证不合法" + message);
}
}
}
/**
* @author ls
* @description 验证 对象字段
* @param t 验证字段
* @param includeField 指定验证的字段集合
*/
public static <T> void validateDataDto(T t, List<String> includeField) {
if (t == null) {
String message = "参数对象为空";
System.out.println("验证不合法" + message);
}
Set<ConstraintViolation<T>> constraintViolations = getValidator().validate(t);
if (constraintViolations.size() > 0) {
boolean b = includeField != null;
String message;
String field;
for (ConstraintViolation<T> constraintViolation : constraintViolations) {
//失败提示
message = constraintViolation.getMessage();
//字段
field = constraintViolation.getPropertyPath().toString();
//字段集合存在 并且 不验证的字段集合 跳过
if (b && !includeField.contains(field)) {
continue;
}
System.out.println("验证不合法" + message);;
}
}
}
}
使用:
EntityTest entityTest = new EntityTest();
entityTest.setAge(11);
entityTest.setName("");
validateUtil.validate(entityTest);
ArrayList<String> strings = new ArrayList<>();
strings.add("name");
validateUtil.validateDataDto(entityTest,strings);
结果:
验证不合法不能为空
验证不合法最大为10
验证不合法不能为空
Comments | NOTHING