实现validation注解进行校验枚举值

2021-03-26  本文已影响0人  我知他风雨兼程途径日暮不赏

背景: validation注解官方没有定义枚举类型的注解,于是这里自定义一个枚举类型注解,来实现对象的验证。

不足:这里仅实现了char类型的简单校验

1. 编写注解

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = EnumConstraintValidator.class)
public @interface Enum {
    char[] value();
    String message() default "对应值非枚举字符属性";
    Class<?>[] groups() default { };
    Class<? extends Payload>[] payload() default { };
}

说明:

2.编写validatedBy实现类

public class EnumConstraintValidator implements ConstraintValidator<Enum,Character> {
    private char[] verification;

    @Override
    public void initialize(Enum anEnum) {
        verification = anEnum.value();
    }

    @Override
    public boolean isValid(Character value, ConstraintValidatorContext constraintValidatorContext) {
        if(verification==null){
            return true;
        }
        for(char c:verification){
            if(value ==c){
                return true;
            }
        }
        return false;
    }
}

说明:

3. 使用

@Data
@ApiModel("可用性免统计审批DTO")
public class AvailabilityStatisticsFreeApprovalRequestDTO {
    @Enum(message = "审批必须为审批通过或者拒绝审批",value = {'1','2'})
    @NotNull(message = "审核状态不能为空")
    @ApiModelProperty(value = "审核状态:0待审核,1审核通过,2审核拒绝",example = "1")
    private Character applyStatus;


}

说明:

上一篇 下一篇

猜你喜欢

热点阅读