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

完成,一個簡單的自定義注解就完工了。使用方式與其他注解一模一樣


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM