JavaUtils-自定義註解校驗格式

工具類:自定義註解,校驗格式

校驗實體類屬性的格式是否正確
/**
 * 自定義註解
 * 
 * @author jianda
 * @date 2017年5月31日
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Constraint(validatedBy=IsMobileValidator.class)
public @interface IsMobile {
	//錯誤碼
	int code() default 1000;
	//錯誤信息
	String message() default "手機號碼格式不正確";
	//分組信息
	Class<?>[] groups() default {};
	
	Class<? extends Payload>[] payload() default {};
}	
/**
 * 註解處理器
 * 
 * @author jianda
 * @date 2017年5月31日
 */
public class IsMobileValidator implements ConstraintValidator{

	@Override
	public void initialize(IsMobile annotation) {
	}

	@Override
	public boolean isValid(String value, ConstraintValidatorContext context) {
		String regex="^[1][3,4,5,7,8][0-9]{9}$";
		if(value==null || value.length()<=0){
			return true;
		}
		return value.matches(regex);
	}
}
/**
 * 自定義註解,校驗工具
 * 
 * @author jianda
 * @date 2017年5月31日
 */
public class ValidationUtils {
	private static Validator validator;
	
	static{
		ValidatorFactory vf=Validation.buildDefaultValidatorFactory();
		validator=vf.getValidator();
	}
	
	/**
	 * 校驗自定義註解參數
	 * @param t
	 * @return
	 * @author jianda
	 * @date 2017年5月31日
	 */
	public static<T> Map<String, Object> validate(T t) {
		Map<String, Object> map;
		Map<String, Object> resultMap=new HashMap<>();
		
		Set<ConstraintViolation<T>> set=validator.validate(t);
		if(set.size()>0){
			for (ConstraintViolation<T> cv : set) {
				map=cv.getConstraintDescriptor().getAttributes();
				resultMap.put("successful", false);
				resultMap.put("code", map.get("code"));
				resultMap.put("message", map.get("message"));
			}
		}else {
			resultMap.put("successful", true);
			resultMap.put("code", 0);
			resultMap.put("message", "驗證通過");
		}
		return resultMap;
	}
	
	/**
	 * 校驗自定義註解參數(分組校驗)
	 * @param t
	 * @param groups
	 * @return
	 * @author jianda
	 * @date 2017年5月31日
	 */
	public static<T> Map<String, Object> validate(T t,Class<?>... groups) {
		Map map;
		Map resultMap=new HashMap<>();
		
		Set<ConstraintViolation<T>> set=validator.validate(t, groups);
		if(set.size()>0){
			for (ConstraintViolation<T> cv : set) {
				map=cv.getConstraintDescriptor().getAttributes();
				resultMap.put("successful", false);
				resultMap.put("code", map.get("code"));
				resultMap.put("message", map.get("message"));
			}
		}else {
			resultMap.put("successful", true);
			resultMap.put("code", 0);
			resultMap.put("message", "驗證通過");
		}
		return resultMap;
	}
}

測試

public class User {
	String name;
	
	@IsMobile(message="你的電話號碼不正確")
	String mobile;
	
	//set、get
}
public class Test {
	public static void main(String[] args) {
		User user =new User();
		user.setMobile("123456789");
		Map<String, Object> map = ValidationUtils.validate(user);
		System.out.println(map);
		//{code=1000, message=你的電話號碼不正確, successful=false}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章