Spring Boot 转换 Enum 忽略大小写

2023-12-23

我有一个 spring-boot 应用程序,它暴露了Rest API https://i.stack.imgur.com/DT1tp.png。此 API 接受枚举列表batchStatus作为查询参数。这batchStatus用于根据状态过滤所有批次。

当尝试调用此 REST API 时,出现以下错误

{
  "timestamp": 1552587376808,
  "status": 400,
  "error": "Bad Request",
  "message": "Failed to convert value of type 'java.lang.String[]' to required type 'java.util.List'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@io.swagger.annotations.ApiParam @javax.validation.Valid @org.springframework.web.bind.annotation.RequestParam com.netshell.test.spring.conversion.rest.api.model.BatchStatus] for value 'active'; nested exception is java.lang.IllegalArgumentException: No enum constant com.netshell.test.spring.conversion.rest.api.model.BatchStatus.active",
  "path": "/batch/status"
}

春天正在寻找active在 BatchStatus 中而不是ACTIVE.

深入研究 spring ConversionService 我发现了两个转换器
1. StringToEnumConverterFactory(来自spring-core)
2. StringToEnumIgnoringCaseConverterFactory(来自 spring-boot)

spring-boot 中是否有任何机制强制使用第二个转换器?

进一步的调试表明,两个转换器都已注册到 ConversionService,但是有conversionService 的多个实例 https://i.stack.imgur.com/Ya6zY.png每个都有不同数量的转换器。在这种情况下,spring如何选择使用哪个conversionService?

Enum BatchStatus创建如下

public enum BatchStatus {
    ACTIVE("active"),
    FAILED("failed"),
    HOLD("hold");

    private String value;
    BatchStatus(String value) {
        this.value = value;
    }

    @Override
    @JsonValue
    public String toString() {
        return String.valueOf(value);
    }

    @JsonCreator
    public static BatchStatus fromValue(String text) {
        for (BatchStatus b : BatchStatus.values()) {
            if (String.valueOf(b.value).equals(text)) {
                return b;
            }
        }
        return null;
    }
}

查看Spring项目的问题跟踪器你可以发现this https://github.com/spring-projects/spring-boot/issues/3021问题,基本上要求StringToEnumIgnoringCaseConverterFactory类要公开。
然而这似乎不会很快发生,因为this https://github.com/spring-projects/spring-boot/issues/15019仍在进行中。

你可以尝试的是配置Converter via WebMvcConfigurer#addFormatters

@Configuration
class CustomWebMvcConfigurer implements WebMvcConfigurer {
    @Override
    public void addFormatters(final FormatterRegistry registry) {
        ApplicationConversionService.configure(registry);
    }
}

ApplicationConversionService#configure将注册StringToEnumIgnoringCaseConverterFactory为您服务,请致电addApplicationConverters method

/** Spring Framework code */
public static void addApplicationConverters(ConverterRegistry registry) {
    ...
    registry.addConverterFactory(new StringToEnumIgnoringCaseConverterFactory());
}

顺便说一句,这是唯一的参考StringToEnumIgnoringCaseConverterFactory,所以这是你唯一的希望; )(不要使用Reflection!抑制住冲动)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot 转换 Enum 忽略大小写 的相关文章

  • Spring boot 2.0.5.RELEASE和mongo 4.0连接问题

    我正在关注使用 MongoDB 访问数据教程春季网站 https spring io guides gs accessing data mongodb 我将 Mongo DB 服务器版本 4 安装为服务当我使用客户端连接到它时 它的身份验证
  • Java“空白最终字段可能尚未初始化”方法中抛出异常

    我有一些代码 例如 final int var1 if isSomethingTrue var1 123 else throwErrorMethod int var2 var1 throwErrorMethod 的定义如下 private
  • ResultSet:通过索引检索列值与通过标签检索

    使用 JDBC 时 我经常遇到这样的结构 ResultSet rs ps executeQuery while rs next int id rs getInt 1 Some other actions 我问自己 以及代码作者 为什么不使用
  • EL 通过 Scriptlet

    在 JSP 中使用 EL 相对于 scriptlet 的优势是什么 EL 被认为是无脚本语言 EL 使 JSP 免受容易出错原始 Java 代码并强制您根据 MVC 思想编写 JSP EL 或像 JSTL 这样的标签库 不可能实现的任何事情
  • Android 游戏偶尔出现延迟

    我正在用 Java 制作一个简单的 Android 游戏 我注意到每 20 40 秒就会出现一些烦人的延迟 首先 我认为它们是由垃圾收集器引起的 但当我检查 LogCat 时 我发现游戏滞后时没有垃圾收集 每当游戏开始滞后时 我都会标记日志
  • 强制 Java 最低版本以“java -version:”运行在 Windows 上不起作用

    我想强制应用程序运行的 JVM 最低版本为 1 6 或更高版本 即 1 6 我的理解是 您可以使用 version 命令行参数来执行此操作 我尝试了一下 在Linux下似乎可以正常工作 但在Windows下却不行 LINUX 我在 Linu
  • spring mvc 跟踪引用页面

    在基于注释的弹簧控制器中 如果用户正在url com first page并点击一个链接或提交一份表格指出url com second page 如何制作second page知道url of first page所以这样second pa
  • Java 中的 MP4 容器编写器

    我想找到一个免费的 Java MP4 容器 编写器 我不需要编码器 只需要能够根据预期值写入正确原子的编码器 Bonus对于这样一个库 也可以编写 有效 F4V 我更喜欢纯 Java 解决方案 而不是使用 JNI 或外部可执行文件的解决方案
  • 为什么下面代码的输出是Thread[main,5,main]

    public class test1 public static void main String args TODO Auto generated method stub Thread t Thread currentThread Sys
  • selenium webdriver 中的多个程序执行不起作用

    Selenium WebDriver 中的多个程序执行不起作用 我编写了 1 个 testNG xml 文件和 2 个 java 类 我尝试从 xml 文件运行这两个 java 类 但这不起作用 XML代码
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • Elasticsearch - EdgeNgram + 突出显示 + term_vector = 不好的突出显示

    当我使用带有edgengram min 3 max 7 front term vector with positions offsets的分析器时 文档包含文本 CouchDB 当我搜索 couc 时 我的亮点是 cpu 而不是 couc
  • 获取包中声明的所有 Java 类的名称

    我正在编写一个功能 它将有助于将类放入我的程序的某个包中 另外 我只想要子类某个类的类 我需要这些类才能调用它们的静态方法 有没有一种自动的方法来做到这一点 如果是的话 速度慢吗 如果我不清楚 我想要的是这样的 ArrayList
  • 春季MVC。方法参数字段的默认值

    我有一个带有方法测试的简单控制器 RequestMapping produces application json ResponseBody public HttpEntity
  • 如何在Java中模拟引用传递?

    我是一个十足的 Java 菜鸟 我知道 Java 将所有参数视为按值传递 并且还有其他几个线程人们对此进行了解释 例如 在 C 中我可以这样做 void makeAThree int n n 3 int main int myInt 4 m
  • 如何列出hadoop hdfs中目录及其子目录中的所有文件

    我在 hdfs 中有一个文件夹 其中有两个子文件夹 每个子文件夹大约有 30 个子文件夹 最后 每个子文件夹都包含 xml 文件 我想列出所有 xml 文件 仅给出主文件夹的路径 在本地我可以这样做apache commons io 的 h
  • Java 验证日期为 yyyyMMddHHmmss

    我想在java中验证给定的日期格式为yyyyMMddHHmmss 状况 应符合格式 yyyyMMddHHmmss 它应该验证当前日期 它应该验证与当前小时有 3 小时或 3 小时差异的小时数 如果满足所有三个条件 Java 方法应返回 tr
  • 如何在速度模板中检索哈希图值

    如何从速度模板中的以下哈希图中检索值 请帮忙 LinkedHashMap
  • Spring Transactional 减慢了整个过程

    我正在尝试分析我有两堂课的情况 其中一个类是 ProcessImpl 它是起点并在内部调用其他子事务 我不知道出了什么问题 processImpl正在导入一些东西并将相关数据写入数据库 Specs Spring orm版本 3 2 18 发
  • 在没有EOF的情况下停止读取java中的输入

    In 问题 如何停止读取输入 我的程序继续运行 要求更多输入 public static void main String args throws Exception BufferedReader br new BufferedReader

随机推荐

  • 在隐藏字段中传递帖子 ID 的值

    这与我的另一个问题是一致的 当我提交属于特定帖子的新评论时 试图获取正确的 post id form html erb 如果没有看到更多代码 很难确切地知道你在做什么 但我的猜测是 post 实例变量已使用设置 post Post find
  • 从 SQLite Blob 创建 Drawable 时出现问题

    我将图像文件作为 blob 缓存在 SQLite 数据库中 我在另一个平台上有一个类似的应用程序 它对相同的图像文件执行相同的操作 两个平台上的数据库报告相同图像的完全相同的大小 所以我认为 但不能保证图像数据完好无损地进入数据库 但是当我
  • Python ASCII 到二进制

    是否有一个内置函数可以将 ASCII 转换为二进制 例如 将 P 转换为 01010000 我正在使用Python 2 6 6 两个人在一起怎么样 bin ord P 0b1010000
  • 使用 HighCharts 和 DotNet.HighCharts 来“玩”多个系列

    我有一组使用 VB NET 和 DotNet HighCharts 创建的系列 Dim SeriesList4As New List Of Series stfipsList4 Count 我想要发生的是类似的事情http jsfiddle
  • 删除navigationItem.titleView后恢复navigationItem.title

    我的应用程序有 2 个选项卡 tabA and tabB 根据我设置的位置navigationItem titleView of tabB to a UIImageView when viewWillAppear 叫做 默认行为tabB就是
  • Android:DOM vs SAX vs XMLPullParser 解析?

    我正在使用 SAX 解析器解析 XML 文档 我想知道与哪个合作更好更快DOM SAX解析器 or XMLPull解析器 这取决于你在做什么 如果你有非常大的文件 那么你应该使用 SAX 解析器 因为它会触发事件并释放它们 内存中不会存储任
  • 响应内容必须是实现 __toString() 的字符串或对象,给定“boolean”。在拉拉维尔

    响应内容必须是实现 toString 的字符串或对象 给定 boolean 这是我的代码 Route get user ip function Request request ip request gt ip return ip retur
  • 在 mac osx lion 中安装(构建)matplotlib

    我安装了 pynum 和 scipy 在带有 python 2 7 的 osx Lion 上 但是当我尝试构建 matplotlib 时 git clone https github com matplotlib matplotlib gi
  • 使用 class_eval 和 instance_eval 访问 Ruby 类变量

    我有以下内容 class Test a 10 def show a puts a a end class lt lt self b 40 def show b puts b b end end end 为什么以下工作有效 Test inst
  • 在 C# 中创建 iCal 文件

    我正在寻找一种在 c asp net 中生成 iCalendar 文件 ics 的好方法 我找到了一些资源 但缺少的一件事是他们对引用可打印fields 具有回车符和换行符的字段 例如 如果描述字段未正确编码 仅显示第一行 并且可能会损坏
  • (403) 您的项目无权访问此功能

    一直遵循有关如何插入网络属性的文档 以便我可以动态创建跟踪代码 目标是将我们的分析转移到 Google Analytics 中 并在分析下在他们自己的 Google 帐户上自动创建客户网站 经过我在网上找到的信息 似乎这个功能可能被列入白名
  • Redis启动后是空的,虽然有.rdb文件

    在我的 redis cli 中运行 shutdown save 后 等待 save 命令完成 跟随 redis 日志 并备份我的 redis rdb 文件 我尝试从头开始启动 redis 服务器 它已启动具有空数据库 dbsize 0 我能
  • POI 4 XPage - 文档生成只能运行一次

    好吧 说实话 标题并没有说出全部真相 我正在使用带有多个按钮 保存 关闭 编辑等 和一个执行 POI 操作的按钮的自定义控件 它生成一个 Word 文件 我在这里遇到一个问题 点击 POI 按钮后 我的其他按钮 以及 POI 按钮 将不再工
  • JavaScript 中的这个

    我在 javascript 中使用 this 时遇到了一个令人困惑的问题 我有一个方法 get data 它返回对象的一些成员变量 有时它会将对象本身返回给我 我不知道为什么 有人能解释一下这里发生了什么吗 function Feed It
  • JIRA:生成每个用户的时间报告?

    抱歉 如果 SO 不是最好的地方 但我在 JIRA 中启用了时间跟踪 并且希望能够为给定日期范围内的每个用户生成时间报告 我唯一拥有的时间跟踪报告选项非常有限 并且不能满足我的要求 是否可以通过标准功能或免费插件来实现 您可能想查看用于 J
  • JavaFX - 带箭头画线(画布)

    我将此代码重写为 JavaFX 时遇到问题 private final int ARR SIZE 8 void drawArrow Graphics g1 int x1 int y1 int x2 int y2 Graphics2D g G
  • 在 EF Core 中如何选择特定列并保存

    我有以下 SQL 表 ID INT Status NVARCHAR 50 FileContent XML 使用 EF Core 我想选择ID and Status列 但不加载 XML 列 由于 xml 数据可能很大 我不想将其加载到内存中
  • MacVim 的西班牙语拼写检查器?

    如何为 MacVim 添加西班牙语拼写检查器 我读到这是一个有用的link ftp ftp uniovi es pub vim runtime spell ghindex html 但显然它不起作用 我该怎么办 我不了解 MacVim 但是
  • 了解使用 LFSR 实现 CRC 生成的两种不同方法

    There are two ways of implementing CRC generation with linear feedback shift registers LFSR as shown in this figure The
  • Spring Boot 转换 Enum 忽略大小写

    我有一个 spring boot 应用程序 它暴露了Rest API https i stack imgur com DT1tp png 此 API 接受枚举列表batchStatus作为查询参数 这batchStatus用于根据状态过滤所