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枚举类型参数认证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于Spring的RPC通讯模型的使用与比较

    基于Spring的RPC通讯模型的使用与比较

    这篇文章主要介绍了基于Spring的RPC通讯模型的使用与比较,详细的介绍了RMI、Caucho的Hessian和Burlap以及Spring自带的HTTP invoker,感兴趣的可以了解一下
    2018-09-09
  • SpringCloud服务的发现与调用详解

    SpringCloud服务的发现与调用详解

    在Java微服务越来越火的今天。几乎什么公司都在搞微服务。而使用的比较多的就是Spring Cloud技术栈。今天就来研究一下Spring Cloud中服务发现与调用的基本原理
    2022-07-07
  • IDEA Maven依赖下载总是失败的几种解决方法

    IDEA Maven依赖下载总是失败的几种解决方法

    我们本地使用 IDEA 运行 maven 项目的时候,有时候运气不好,就会遇到某些 maven 依赖无法正常找到、导入,这就会导致 IDEA 构建项目的时候爆出一堆醒目的红色 Error,今天给大家分享IDEA Maven依赖下载总是失败的几种解决方法,感兴趣的朋友一起看看吧
    2023-09-09
  • Mybatis-Plus主键生成策略的方法

    Mybatis-Plus主键生成策略的方法

    本文主要介绍了Mybatis-Plus主键生成策略的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • SpringBoot使用JUL实现日志记录功能

    SpringBoot使用JUL实现日志记录功能

    在SpringBoot中,我们可以使用多种日志框架进行日志记录,其中,JUL(Java Util Logging)是Java平台自带的日志框架,它提供了简单的 API 和配置,可以轻松地进行日志记录,本文将介绍如何在 SpringBoot中使用JUL进行日志记录,并提供示例代码
    2023-06-06
  • SWT(JFace)体验之StackLayout布局

    SWT(JFace)体验之StackLayout布局

    SWT(JFace)体验之StackLayout布局实现代码。
    2009-06-06
  • IDEA配置maven环境的详细教程(Unable to import maven project报错问题的解决)

    IDEA配置maven环境的详细教程(Unable to import maven project报错问题的解决)

    这篇文章主要介绍了IDEA配置maven环境的详细教程(Unable to import maven project问题的解决),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Java编程获取文件列表及子文件目录的方法(非递归)

    Java编程获取文件列表及子文件目录的方法(非递归)

    这篇文章主要介绍了Java编程获取文件列表及子文件目录的方法(非递归),具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • Java实现简单台球游戏

    Java实现简单台球游戏

    这篇文章主要为大家详细介绍了Java实现简单台球游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • Springboot集成jdbcTemplate过程解析

    Springboot集成jdbcTemplate过程解析

    这篇文章主要介绍了Springboot集成jdbcTemplate过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04

最新评论