SpringBoot枚举类型参数认证的实现代码

 更新时间:2023年12月29日 09:31:06   作者:代码君.  
项目当中经常需要接口参数是否在一个可选的范围内,也就是验证类枚举参数的需求,所以本文我们将使用SpringBoot实现枚举类型参数认证,文中有详细的代码示例,需要的朋友可以参考下

背景

项目当中经常需要接口参数是否在一个可选的范围内,也就是验证类枚举参数的需求。
如果参数类型是String类型,那么可以使用@Pattern注解,就是用正则进行匹配,比如:

@Pattern(regex = "^(male|female)$", message = "性别不合法")
private String gender;

但是如果参数类型不是String类型,就不能使用@Pattern了。SpringBoot的validation中并没有提供针对这种枚举值的校验注解。

接下来我们来自己实现一个。

定义枚举类

为了后续可以方便获取枚举值,我们的枚举类需要实现一个interface,就叫ValueEnum:

public interface ValueEnum {
     Interger getValue();
}

定义枚举:

@Getter
@RequiredArgsConstructor
public enum Gender implements ValueEnum {

    MALE(1, "男"),
    FEMALE(2, "女");
    private final Integer value;
    private final String name;
}

定义校验注解

@Target( FIELD )
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = EnumValueValidator.class)
public @interface EnumValue {

    String message() default "参数值不合法";

    Class<? extends ValueEnum> enumClass();

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

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

这里指定了校验器EnumValueValidator,接下来定义这个。

定义EnumValueValidator

public class EnumValueValidator implements ConstraintValidator<EnumValue, Integer> {

    private EnumValue enumValue;

    @Override
    public boolean isValid(Integer value, ConstraintValidatorContext context) {
        Class<? extends ValueEnum> enumClass = enumValue.enumClass();
        return Arrays.stream(enumClass.getEnumConstants()).anyMatch(i -> Objects.equals(i.getValue(), value));
    }

    @Override
    public void initialize(EnumValue enumValue) {
        this.enumValue = enumValue;
    }
}

在代码中使用

@EnumValue(enumClass = Gender.class)
private Integer gender;

到此这篇关于SpringBoot枚举类型参数认证的实现代码的文章就介绍到这了,更多相关SpringBoot枚举类型参数认证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java之不通过构造函数创建一个对象问题

    Java之不通过构造函数创建一个对象问题

    这篇文章主要介绍了Java之不通过构造函数创建一个对象问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Java多线程4种拒绝策略小结

    Java多线程4种拒绝策略小结

    当线程池中的任务队列已满且无法再接受新的任务时,就需要采取拒绝策略来处理这种情况,本文主要介绍了Java多线程拒绝策略,包含了四种常见的拒绝策略,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Javax Validation自定义注解进行身份证号校验

    Javax Validation自定义注解进行身份证号校验

    这篇文章主要为大家详细介绍了如何通过Javax Validation自定义注解进行身份证号校验,文中的示例代码讲解详细,有需要的小伙伴可以参考一下
    2024-10-10
  • java如何使用ftp下载远程服务器文件

    java如何使用ftp下载远程服务器文件

    Java通过FTP下载文件主要有两种方式:第一种是直接在连接中包含账号和密码进行远程下载;第二种是登录后使用账号和密码进行下载,这些方法适用于需要从远程服务器获取文件的场景
    2024-11-11
  • OGNL表达式基本语法与用法详解

    OGNL表达式基本语法与用法详解

    这篇文章主要介绍了OGNL表达式基本语法与用法详解,具有一定参考价值。需要的朋友可以了解下。
    2017-09-09
  • Java求最小生成树的两种算法详解

    Java求最小生成树的两种算法详解

    最小生成树(Minimum Spanning Tree):在连通图的所有生成树中,所有边的权值和最小的生成树,称为最小生成树。这篇文章主要介绍了求最小生成树的两种方法:Prim算法和Kruskal算法,需要的可以参考一下
    2022-01-01
  • idea查看properties中文变成unicode码的解决方案

    idea查看properties中文变成unicode码的解决方案

    这篇文章主要介绍了idea查看properties中文变成unicode码的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Java 中的异常处理机制详情介绍

    Java 中的异常处理机制详情介绍

    本篇文章主要介绍Java中的异常、如何处理函数抛出的异常、处理异常的原则、异常处理时,性能开销大的地方,感兴趣的小伙伴可以参考一下
    2022-09-09
  • Java实现自动生成缩略图片

    Java实现自动生成缩略图片

    这篇文章主要为大家详细介绍了Java实现自动生成缩略图片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Java多线程之FutureTask的介绍及使用

    Java多线程之FutureTask的介绍及使用

    之前介绍了线程池相关的对象,Runable Callable与Future,下面介绍FutureTask的作用,它的特性是怎样的呢,需要的朋友可以参考下
    2021-06-06

最新评论