SpringMVC bean validator 自定义注解

有时候现有的验证注解满足不了部分业务需求,所以就有了扩展自定义注解。

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.最后

完成,一个简单的自定义注解就完工了。使用方式与其他注解一模一样

posted @ 2014-11-01 11:13  小阿摩  阅读(3332)  评论(0编辑  收藏  举报