首页 > 解决方案 > 在 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 端点中的枚举忽略大小写?

这个问题不重复,因为它与查询参数反序列化有关。

标签: javaspringspring-bootenums

解决方案


编辑:下面的答案不正确。您必须定义一个自定义PropertyEditor并将其注册到我在这篇文章中@InitBinder解释的 Spring 中。感谢@Dave 在评论中指出这一点。


Spring Boot 2.0 正在使用具有ACCEPT_CASE_INSENSITIVE_ENUMS功能的 Jackson 2.9。您应该可以通过设置启用它

spring.jackson.mapper.ACCEPT_CASE_INSENSITIVE_ENUMS = true 

根据文档,附录 A 的属性。


推荐阅读