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> constraintViolations = validator.validate(object, groups); // 检查约束违反集合是否为空,若不为空则表示存在校验不通过的情况。 if (!constraintViolations.isEmpty()) { // 获取集合中的第一个违反约束的信息。 // 这里仅取第一个违反约束的信息作为异常信息抛出,可能会忽略其他违反约束的情况。 ConstraintViolation constraint = (ConstraintViolation)constraintViolations.iterator().next(); // 抛出EIException异常,将违反约束的详细信息作为异常消息。 throw new EIException(constraint.getMessage()); } } }