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;