工具類:自定義註解,校驗格式
校驗實體類屬性的格式是否正確
/**
* 自定義註解
*
* @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}
}
}