springboot枚举类型自定义校验器

1,005 阅读1分钟

1. 定义枚举类

@AllArgsConstructor
@Getter
public enum DimDateEnum {

    YEARS, MONTHS, DAYS;
    @Override
    public String toString() {
        return this.name();
    }
    /**
     * 是否是合法的维度类型
     *
     * @param code  时间维度类型
     * @return 是否合法
     */
    public static boolean isValidDimDate(final String code) {
        for (DimDateEnum item : values()) {
            if (item.name().equals(code)) {
                return true;
            }
        }
        return false;
    }
}

2.定义时间维度校验注解

@Constraint(validatedBy = CheckDimDateValidator.class)表示,加上这个注解的字段由CheckDimDateValidator进行校验
@Target({ElementType.FIELD, ElementType.METHOD,ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CheckDimDateValidator.class)
public @interface CheckDimDate {

    String message() default "";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

3.定义检验器

<CheckDimDate, String> 表示校验类型和属性类型
public class CheckDimDateValidator implements ConstraintValidator<CheckDimDate, String> {

    @Override
    public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
        return StringUtils.isNotBlank(s) && DimDateEnum.isValidDimDate(s);
    }
}

4.用法:在字段上加检验注解

    @NotNull(message = "时间维度不能为空")
    @CheckDimDate(message = "时间维度为YEARS|MONTHS|DAYS")
    private String dimDate;