美文网首页
Springboot 自定义参数校验注解

Springboot 自定义参数校验注解

作者: 楚长铭 | 来源:发表于2020-02-14 16:29 被阅读0次

参数校验注解

首先从网上找的常用参数注解

@NotNull    任何类型    属性不能为null
@NotEmpty   集合  集合不能为null,且size大于0
@NotBlanck  字符串、字符  字符类不能为null,且去掉空格之后长度大于0
@AssertTrue Boolean、boolean 布尔属性必须是true
@Min    数字类型(原子和包装) 限定数字的最小值(整型)
@Max    同@Min   限定数字的最大值(整型)
@DecimalMin 同@Min   限定数字的最小值(字符串,可以是小数)
@DecimalMax 同@Min   限定数字的最大值(字符串,可以是小数)
@Range  数字类型(原子和包装) 限定数字范围(长整型)
@Length 字符串 限定字符串长度
@Size   集合  限定集合大小
@Past   时间、日期   必须是一个过去的时间或日期
@Future 时期、时间   必须是一个未来的时间或日期
@Email  字符串 必须是一个邮箱格式
@Pattern    字符串、字符  正则匹配字符串

自定义注解

依赖

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

用法

参数校验注解的启用,共有两种启用注解,添加之后参数校验注解才会生效

  • @Validated
@PostMapping("/")
    public Object test(@Validated @RequestBody TestModel testModel) {
        return testModel;
    }
  • @Valid
@Data
public class TestModel {

    @NameValidatorAnnotation
    private String name;

    @Valid
    private PassWord password;

    public static class PassWord{
        @NotNull
        private String password;
    }
}

自定义参数校验注解

注解

@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE,
        ElementType.CONSTRUCTOR, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {NameValidator.class}) // 指定此注解的实现,即:验证器
public @interface NameValidatorAnnotation {

    boolean required() default true;

    String message() default "请输入正确的姓名格式";

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

    Class<? extends Payload>[] payload() default {};

}
  • 其中message,groups和payload都是必须要添加的
  • 当验证不通过会返回message的内容
  • @Target用于描述该注解的作用域
CONSTRUCTOR:用于描述构造器
FIELD:用于描述域
LOCAL_VARIABLE:用于描述局部变量
METHOD:用于描述方法
PACKAGE:用于描述包
PARAMETER:用于描述参数
TYPE:用于描述类、接口(包括注解类型) 或enum声明
  • @Retention用于描述生命周期
SOURCE:在源文件中有效(源文件保留)
CLASS:在class文件中有效(class保留)
RUNTIME:在运行时有效(运行时保留)
  • @Documented 使得该注解 javadoc工具记录
  • @Constraint 指定实现类

实现类

@Slf4j
public class NameValidator implements ConstraintValidator<NameValidatorAnnotation, String> {

    private boolean isRequired = false;

    /**
     * 获取注解属性的值
     *
     * @param constraintAnnotation
     */
    @Override
    public void initialize(NameValidatorAnnotation constraintAnnotation) {
        isRequired = constraintAnnotation.required();
    }

    /**
     * @param value
     * @param context
     * @return 是否通过验证
     */
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if (value.equals("name")) {
            return true;
        } else return false;

    }
}
  • 实现ConstraintValidator接口,填入注解和对应被注解变量的类型
  • initialize方法会传入注解实例,这里可以获取其他自定义属性的值
  • isValid方法就是校验的方法,value是被注解的变量的值,返回true是通过校验,返回false就是不通过校验

相关文章

网友评论

      本文标题:Springboot 自定义参数校验注解

      本文链接:https://www.haomeiwen.com/subject/jcfjfhtx.html