我的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端点中反序列化枚举忽略大小写?
此问题不重复,因为它与查询参数反序列化相关。
4条答案
按热度按时间okxuctiv1#
**EDIT:**下面的答案是不正确的。你必须定义一个自定义的
PropertyEditor
,并将其注册到Spring@InitBinder
,我解释了in this post。感谢@Dave在评论中指出这一点。Sping Boot 2.0使用的是Jackson2.9,它具有ACCEPT_CASE_INSENSITIVE_ENUMS功能。您应该可以通过设置
属性符合docs, Appendix A。
fwzugrvs2#
egdjgwm83#
可以为所有枚举创建通用转换器
然后在您的任何Controller中使用它:
7xllpg7q4#
如果你想不区分大小写地处理所有枚举,你可以使用Spring的ApplicationConversionService。
您只需使用以下小配置注册它(请参阅baeldung):