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

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 { };
}

说明:

  • @Target:该注解的作用域,我们仅针对于字段进行使用,所以为:ElementType.FIELD
  • @Retention:整个注解的生命周期,填写整个运行时生命周期RetentionPolicy.RUNTIME,不会吃亏的
  • @Constraint(validatedBy = EnumConstraintValidator.class):该注解由谁去实现,具体的实现在EnumConstraintValidator类中
  • value():存放用户自定义的char枚举值

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

说明:

  • ConstraintValidator<Enum,Character>:对应的泛型为注解类型和验证字段类型
  • initialize():获取对应注解,用户填写的value()信息
  • isValid():遍历存储到的verification,如果匹配到则返回true,匹配不到返回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;


}

 

在Spring Boot项目中,我们可以使用Java Bean Validation(JSR 303)规范中的注解校验枚举。比如,我们可以使用@EnumValidator注解校验枚举。 首先,我们需要在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.2.0.Final</version> </dependency> ``` 接下来,我们可以在实体类中使用@EnumValidator注解校验枚举。比如,以下是一个使用@EnumValidator注解校验枚举的示例代码: ```java public enum Gender { MALE, FEMALE } public class User { @NotNull private String name; @EnumValidator(enumClass = Gender.class, message = "gender must be MALE or FEMALE") private Gender gender; // getters and setters } ``` 在上述代码中,@EnumValidator注解用于校验gender属性是否为Gender枚举中的。如果不是,会抛出校验异常并提示"gender must be MALE or FEMALE"。 最后,我们需要在Controller中使用@Valid注解来触发参数校验。比如,以下是一个使用@Valid注解触发参数校验的示例代码: ```java @RestController @RequestMapping("/users") public class UserController { @PostMapping public ResponseEntity<String> createUser(@Valid @RequestBody User user) { // do something return ResponseEntity.ok("User created successfully"); } } ``` 在上述代码中,@Valid注解用于触发参数校验。如果校验失败,会抛出异常并返回相应的错误信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值