java - 在 Spring Boot 控制器中反序列化枚举忽略大小写
问题描述
我有 Spring Boot 端点,它有枚举作为查询参数:
@GetMapping("/example")
public List<Example> getByEnum(@RequestParam(name = "exampleEnum", required = false) ExampleEnum exampleEnum) {
// code
}
和枚举类:
public enum ExampleEnum {
FIRST,
SECOND,
}
如果我将大写的枚举值传递给端点,它会很好地反序列化,但会抛出小写的错误:
java.lang.IllegalArgumentException: No enum constant
如何反序列化 Spring Boot Rest 端点中的枚举忽略大小写?
这个问题不重复,因为它与查询参数反序列化有关。
解决方案
编辑:下面的答案不正确。您必须定义一个自定义PropertyEditor
并将其注册到我在这篇文章中@InitBinder
解释的 Spring 中。感谢@Dave 在评论中指出这一点。
Spring Boot 2.0 正在使用具有ACCEPT_CASE_INSENSITIVE_ENUMS功能的 Jackson 2.9。您应该可以通过设置启用它
spring.jackson.mapper.ACCEPT_CASE_INSENSITIVE_ENUMS = true
根据文档,附录 A 的属性。
推荐阅读
- vue.js - Vue.http.interceptors.push undefined 不是一个对象
- python - 使用计算机视觉的方案中的符号检测
- java - RecyclerView 适配器 - 只有创建视图层次结构的原始线程才能接触其视图
- json - 如何应用基于点的 JSONPath 来播放 JsValue
- vim - Vim - 移动到具有相同缓冲区的其他窗口时调用缓冲区事件
- javascript - React js引导表按Asc或Dsc排序
- powershell - 我无法使用此脚本在 IIS 服务器中添加网站
- asp.net-core - 使用 .netcore 应用程序的基本身份验证
- php - PHP:将存储在 $_FILES 中的上传文件重新提交/转发到另一个脚本
- python - 使用 Selenium 获取 HTML 的某些元素