springboot自定义验证注解

  1. 云栖社区>
  2. 博客>
  3. 正文

springboot自定义验证注解

划破天际 2019-05-23 14:00:33 浏览461
展开阅读全文

本次用手机号码为示例编写一个自定义注解,可使用在属性、参数、方法上。

一、编写注解(@interface)类

  • 注解基础知识必须掌握

@Retention :用来说明该注解类的生命周期。它有以下三个参数:
RetentionPolicy.SOURCE : 注解只保留在源文件中
RetentionPolicy.CLASS : 注解保留在class文件中,在加载到JVM虚拟机时丢弃
RetentionPolicy.RUNTIME : 注解保留在程序运行期间,此时可以通过反射获得定义在某个类上的所有注解。


@Target : 用来说明该注解可以被声明在那些元素之前。
ElementType.TYPE:说明该注解只能被声明在一个类前。
ElementType.FIELD:说明该注解只能被声明在一个类的字段前。
ElementType.METHOD:说明该注解只能被声明在一个类的方法前。
ElementType.PARAMETER:说明该注解只能被声明在一个方法参数前。
ElementType.CONSTRUCTOR:说明该注解只能声明在一个类的构造方法前。
ElementType.LOCAL_VARIABLE:说明该注解只能声明在一个局部变量前。
ElementType.ANNOTATION_TYPE:说明该注解只能声明在一个注解类型前。
ElementType.PACKAGE:说明该注解只能声明在一个包名前。


@Constraint来限定自定义注解的方法


@Documented注解
Documented注解表明这个注释是由 javadoc记录

  • 注解类
@Constraint(validatedBy = Phone.class)
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PhoneRegex {

    String message() default "手机号码不正确";

    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { };
}
  • 数据验证类需实现ConstraintValidator接口

PhoneRegex是注解类名称
String是字段类型

public class Phone implements ConstraintValidator<PhoneRegex,String> {
    @Override
    public void initialize(PhoneRegex constraintAnnotation) {

    }
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        String regex="^[1](([3|5|8][\\d])|([4][5,6,7,8,9])|([6][5,6])|([7][3,4,5,6,7,8])|([9][8,9]))[\\d]{8}$";
        if(StringUtils.isNotEmpty(value)){
            Pattern p = Pattern.compile(regex);
            Matcher m = p.matcher(value);
            return m.matches();
        }
        return false;
    }
}
  • 使用方法
    @PhoneRegex
    private String contactPhone;

欢迎各路大神指点错误

网友评论

登录后评论
0/500
评论
划破天际
+ 关注