校验工具-BeanValidator开发

时间:2025-03-11 21:22:45
package com.mmall.util; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; import org.apache.commons.collections.MapUtils; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.mmall.exception.ParamException; public class BeanValidator { //全局校验工厂 private static ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory(); //传入对象 //key=字段 value=错误信息 public static <T> Map<String, String> validate(T t, Class... groups) { Validator validator = validatorFactory.getValidator(); Set validateResult = validator.validate(t, groups); if (validateResult.isEmpty()) { return Collections.emptyMap();//若没有错误信息,返回空的Map } else { LinkedHashMap errors = Maps.newLinkedHashMap();//创建HashMap Iterator iterator = validateResult.iterator(); while (iterator.hasNext()) { ConstraintViolation violation = (ConstraintViolation)iterator.next(); errors.put(violation.getPropertyPath().toString(), violation.getMessage());//key 是字段 value 是错误信息 } return errors; } } //传入集合 public static Map<String, String> validateList(Collection<?> collection) { //collection为null 抛出NullPointerException 若不为空 返回该集合 Preconditions.checkNotNull(collection); Iterator iterator = collection.iterator(); Map errors; do { if (!iterator.hasNext()) { return Collections.emptyMap();//若集合中没有数据 返回空的Map } Object object = iterator.next(); errors = validate(object, new Class[0]);//调用前面的方法 } while (errors.isEmpty()); return errors; } public static Map<String, String> validateObject(Object first, Object... objects) { if (objects != null && objects.length > 0) { return validateList(Lists.asList(first, objects));//将数组转集合传入 } else { return validate(first, new Class[0]); } } //出现异常时 抛出 public static void check(Object param) throws ParamException { Map<String, String> map = BeanValidator.validateObject(param); if (MapUtils.isNotEmpty(map)) {// !=null && size > 0 throw new ParamException(map.toString()); } } }