You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hotels/back/src/main/java/com/utils/ValidatorUtils.java

51 lines
2.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.utils;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import com.entity.EIException;
/**
* hibernate-validator校验工具类
* 该类借助Hibernate Validator框架为对象提供校验功能。
* 当对象不符合预先定义的约束条件时会抛出EIException异常。
*/
public class ValidatorUtils {
// 静态的Validator对象用于执行校验操作。
// 由于Validator是线程安全的使用静态变量可以在整个应用程序中共享同一个实例提高性能。
private static Validator validator;
// 静态代码块在类加载时执行确保Validator对象只被初始化一次。
// 通过Validation类构建默认的验证工厂然后从工厂中获取Validator实例。
static {
validator = Validation.buildDefaultValidatorFactory().getValidator();
}
/**
* 校验对象的方法
*
* @param object 待校验的对象该对象需要使用Hibernate Validator的注解来定义约束条件。
* @param groups 待校验的组,可用于指定在不同场景下应用不同的约束条件。
* @throws EIException 若校验不通过即对象存在违反约束的情况会抛出EIException异常。
* 异常信息为第一个违反约束的详细描述。
*/
public static void validateEntity(Object object, Class<?>... groups)
throws EIException {
// 调用Validator的validate方法对对象进行校验根据指定的组应用相应的约束条件。
// 该方法会返回一个包含所有违反约束信息的Set集合。
Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object, groups);
// 检查约束违反集合是否为空,若不为空则表示存在校验不通过的情况。
if (!constraintViolations.isEmpty()) {
// 获取集合中的第一个违反约束的信息。
// 这里仅取第一个违反约束的信息作为异常信息抛出,可能会忽略其他违反约束的情况。
ConstraintViolation<Object> constraint = (ConstraintViolation<Object>)constraintViolations.iterator().next();
// 抛出EIException异常将违反约束的详细信息作为异常消息。
throw new EIException(constraint.getMessage());
}
}
}