Java使用javax.validation.Validator对对象以及对象中的类对象进行校验

文章 2020-06-12 13:35 0 113 全屏看文

使用javax.validation.Validator对对象以及对象中的类对象进行校验。


这样如果被校验的类中存在类对象,会进行迭代校验。如果字段存在注解校验就会校验。

image.png

代码:

package cm.sanshu.common.util;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
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.springframework.util.StringUtils;

import cn.sanshu.common.exceptions.ApplicationException;

public class ValidateUtil {
	private static ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
	public static <T> void validate(T t)  {
		try {
			Class<? extends Object> clazz = t.getClass();
			 Field [] fs = clazz.getDeclaredFields();
			 if(fs.length > 0 ) {
				 for(Field f : fs) {
					 if(f.getGenericType().toString().indexOf("要校验的包路径")!=-1) {					 
						 String getMethodName = ReflectUtil.getGetMethodName(f.getName().toString());
						 Method getMethod = clazz.getMethod(getMethodName,null);
						 Object o = getMethod.invoke(t);
						 if(o!=null) {
							 validate(o);
						 }
						 
					 }
				 }
			 }	 
			Validator validator = factory.getValidator();
			Set<ConstraintViolation<T>> constraintViolations = validator.validate(t);
			for (ConstraintViolation<T> constraintViolation : constraintViolations) {
				throw new ValidateBusinessException(Constant.SUB_SYSTEM, ExceptionType.VCE10009 , constraintViolation.getMessage());
			}
			
			Method [] ms =  clazz.getDeclaredMethods();
			for(Method m : ms) {
				if(m.getName().equals("validate")) {
					m.invoke(t);
				}
			}
			
		} catch (Exception e) {
			throw new ApplicationException(e);
		}
	}
}


请将:

要校验的包路径

替换成您要校验的路径,比如 cn.sanshu.service

-EOF-