1 創建自定義注解(使用注解接口@interface)
1 package com.ssm.controller.validated.annotation;
2
3 import com.ssm.controller.validated.annotation.impl.PhoneVali;
4
5 import javax.validation.Constraint;
6 import javax.validation.Payload;
7 import javax.validation.constraints.NotNull;
8 import java.lang.annotation.*;
9
10 @Documented
11 @Constraint(validatedBy = PhoneVali.class)//注解實現類
12 @Target(ElementType.FIELD)//注解應用類型(在屬性域上應用)
13 @Retention(RetentionPolicy.RUNTIME)//表示保留至運行時,可以被反射讀取
14 @NotNull
15 public @interface Phone {
16 String message() default "電話號碼格式不正確";//錯誤提示信息
17 Class<?>[] groups() default {};//分組
18 Class<? extends Payload>[] payload() default {};//這個暫時不清楚作用
19 }
2 編寫注解實現類
1 package com.ssm.controller.validated.annotation.impl;
2
3 import com.ssm.controller.validated.annotation.Phone;
4
5 import javax.validation.ConstraintValidator;
6 import javax.validation.ConstraintValidatorContext;
7
8 public class PhoneVali implements ConstraintValidator<Phone, String> {
9 @Override
10 public void initialize(Phone phone) {
11 }
12
13 @Override
14 public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
15 if (s == null) {
16 return false;
17 } else if(s.matches("^(13\\d|14[579]|15[^4\\D]|17[^49\\D]|18\\d)\\d{8}$")){
18 return true;
19 }else {
20 return false;
21 }
22 }
23 }
繼承ConstraintValidator實現初始化方法(initialize)和驗證方法(isValid)
3 與其他驗證注解一般使用
1 @Phone(groups = {AddUserValid.class})
2 private String userPhone;