有时候现有的验证注解满足不了部分业务需求,所以就有了扩展自定义注解。
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.最后
完成,一个简单的自定义注解就完工了。使用方式与其他注解一模一样