JSR303通用验证类

JSR303是JAVA EE6中的子规范。

用于对Java Bean的字段值进行校验,确保输入进来的数据在语义上是正确的,使验证逻辑从业务代码中脱离出来。

JSR303是运行时数据验证框架,验证之后验证的错误信息会马上返回。

有两个版本JSR303(BeanValidation1.0)和JSR349(BeanValidation1.1)。

由于之前使用的框架是structs2,没有使用springMvc没办法直接用注解,所以写了一个通用验证工具类,有其他好的验证建议可以写评论一起交流,以下是具体用法:

1.BeanValidatorUtils(必要)

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import javax.validation.Validation;
import javax.validation.Validator;

import org.hibernate.validator.HibernateValidator;
import org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator;
import org.hibernate.validator.resourceloading.AggregateResourceBundleLocator;

/**
 * 通用验证处理方法 工具类,符合JSR303验证规范,内部采用Hibernate Validator实现
 */
public class BeanValidatorUtils {
	/** 存放错误信息的properties数组 */
	public static final List VALIDATION_MESSAGES = Arrays.asList("validationMessage");
	/** 错误消息分隔符 */
	public static final String SEPARATOR = "
"; /** * 使用hibernate的注解来进行验证 .failFast(true)遇到错误立即报错 */ private static Validator validator = Validation.byProvider(HibernateValidator.class).configure() .messageInterpolator( new ResourceBundleMessageInterpolator(new AggregateResourceBundleLocator(VALIDATION_MESSAGES))) .buildValidatorFactory().getValidator(); /** * 调用JSR303的validate方法, 验证失败时返回错误信息列表 * * @param bean * 要验证的JavaBean * @param groups * 验证分组 * @return 错误信息列表 */ public static List validateListResult(T bean, Class... groups) { List errorMessages = new ArrayList(); Set> constraintViolations = validator.validate(bean, groups); // 抛出检验异常 if (constraintViolations.size() > 0) { for (ConstraintViolation violation : constraintViolations) { errorMessages.add(violation.getMessage()); } } return errorMessages; } /** * 调用JSR303的validate方法, 验证失败时返回错误信息Map * * @param bean * 要验证的JavaBean * @param groups * 验证分组 * @return 错误信息列表 */ public static Map validateMapResult(T bean, Class... groups) { Map errorMessages = new HashMap(); Set> constraintViolations = validator.validate(bean, groups); // 抛出检验异常 if (constraintViolations.size() > 0) { for (ConstraintViolation violation : constraintViolations) { errorMessages.put(violation.getPropertyPath().toString(), violation.getMessage()); } } return errorMessages; } /** * 调用JSR303的validate方法, 验证失败时抛出ConstraintViolationException. * * @param bean * 要验证的JavaBean * @param groups * 验证分组 * */ public static void validateWithException(Object bean, Class... groups) throws ConstraintViolationException { Set> constraintViolations = validator.validate(bean, groups); if (constraintViolations.size() > 0) { // 错误信息以异常的 形式抛出可通过e.getConstraintViolations()方法获取具体验证信息 throw new ConstraintViolationException(constraintViolations); } } /** * 内部转换方法,将错误信息List转换成String * * @param errorList * 将错误信息List * @return 错误信息 */ public static String validateListToString(List errorList) { StringBuffer strBuffer = new StringBuffer(); for (String error : errorList) { strBuffer.append(error); strBuffer.append(SEPARATOR); } return strBuffer.toString(); } }

2.ValidatorGroup(一个JavaBean满足不同验证规则时使用,可选)

/**
 * 通用验证分组,可根据需求增加接口即可
 */
public interface ValidatorGroup {
	/**
	 * 保存验证分组
	 */
	public static interface Save {
	}

	/**
	 * 插入验证分组
	 */
	public static interface Insert {
	}

	/**
	 * 查询验证分组
	 */
	public static interface Query {
	}

	/**
	 * 删除验证分组
	 */
	public static interface Delete {
	}

	/**
	 * 更新验证分组
	 */
	public static interface Update {
	}
}

3.classpath下 validationMessage.properties(通用的验证提示信息,可选)

validator.required=是必填字段
validator.length=需要控制在
validator.engnum=只能包含大小写英文以和下划线
4.pom.xml
  
    javax.validation  
    validation-api  
    2.0.1.Final  
  
  
    org.hibernate  
    hibernate-validator  
    6.0.8.Final  
  
  
    javax.el  
    javax.el-api  
    3.0.0  
 

BeanValidatorUtils 内方法介绍
内部转换方法,将错误信息List转换成String
String strList  = BeanValidatorUtils. validateListToString(errorList);

调用通用验证方法取得验证后的错误信息列表, 可传递多个验证分组(可选)
List strList  = BeanValidatorUtils. validateListResult(validatorBean ,group...);

调用通用验证方法取得验证后的错误信息Map 可传递多个验证分组(可选)
Map  = BeanValidatorUtils. validateMapResult(validatorBean ,group... );

调用通用验证方法, 验证失败时抛出ConstraintViolationException 可传递多个验证分组(可选)
BeanValidatorUtils. validateWithException(validatorBean ,group... );

使用方法
一,首先要按照JSR303验证规范,写好需要验证的JavaBean,例如

JSR303通用验证类_第1张图片

例子

//需要验证的JavaBean
ValidatorBean validatorBean = new ValidatorBean();
//调用通用验证方法取得验证后的错误信息列表
List strList  = BeanValidatorUtils.validateListResult(validatorBean);
//如果有错误则抛出异常
if(strList.size()>0){
    //将错误信息列表转化成字符串
    String error = BeanValidatorUtils.validateListToString(strList);
    System.out.println(error);
}


你可能感兴趣的:(java)