有時候現有的驗證注解滿足不了部分業務需求,所以就有了擴展自定義注解。
1.添加注解類
1 import javax.validation.Constraint; 2 import javax.validation.Payload; 3 import java.lang.annotation.Documented; 4 import java.lang.annotation.Retention; 5 import java.lang.annotation.Target; 6 7 import static java.lang.annotation.ElementType.*; 8 import static java.lang.annotation.ElementType.PARAMETER; 9 import static java.lang.annotation.RetentionPolicy.RUNTIME; 10 11 /** 12 * User: zhoujingjie 13 * Date: 14-10-31 14 * Time: 下午6:00 15 */ 16 @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) 17 @Retention(RUNTIME) 18 @Documented 19 @Constraint(validatedBy = { PhoneNoValidator.class}) 20 public @interface PhoneNo { 21 22 //默認錯誤消息 23 String message() default "手機號碼錯誤"; 24 25 //分組 26 Class<?>[] groups() default { }; 27 28 //負載 29 Class<? extends Payload>[] payload() default { }; 30 31 //指定多個時使用 32 @Target({ FIELD, METHOD, PARAMETER, ANNOTATION_TYPE }) 33 @Retention(RUNTIME) 34 @Documented 35 @interface List { 36 PhoneNo[] value(); 37 } 38 }
自定義注解需要自定義validator,所以注解里變量也不是強制需要,可以就一個message也可以
2.添加PhoneNoValidator
1 import org.apache.commons.lang.StringUtils; 2 3 import javax.validation.ConstraintValidator; 4 import javax.validation.ConstraintValidatorContext; 5 6 /** 7 * 手機號碼驗證 8 * User: zhoujingjie 9 * Date: 14-11-1 10 * Time: 上午10:45 11 */ 12 public class PhoneNoValidator implements ConstraintValidator<PhoneNo,String> { 13 14 @Override 15 public void initialize(PhoneNo constraintAnnotation) { 16 } 17 18 19 @Override 20 public boolean isValid(String value, ConstraintValidatorContext context) { 21 if(StringUtils.isEmpty(value)) 22 return true; 23 if(value.matches("((\\+86)|(86))?1[3|4|5|8]\\d{9}")){ 24 return true; 25 } 26 return false; 27 } 28 }
3.最后
完成,一個簡單的自定義注解就完工了。使用方式與其他注解一模一樣
