Springboot 自定义参数校验注解

2020-02-14  本文已影响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'
    }
}

用法

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

@PostMapping("/")
    public Object test(@Validated @RequestBody TestModel testModel) {
        return testModel;
    }
@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 {};

}
CONSTRUCTOR:用于描述构造器
FIELD:用于描述域
LOCAL_VARIABLE:用于描述局部变量
METHOD:用于描述方法
PACKAGE:用于描述包
PARAMETER:用于描述参数
TYPE:用于描述类、接口(包括注解类型) 或enum声明
SOURCE:在源文件中有效(源文件保留)
CLASS:在class文件中有效(class保留)
RUNTIME:在运行时有效(运行时保留)

实现类

@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;

    }
}
上一篇 下一篇

猜你喜欢

热点阅读