Spring Boot绑定@Value到Enum不区分大小写

枚举

public enum Property { A, AB, ABC; } 

领域

 @Value("${custom.property}") protected Property property; 

application.properties (小写)

 custom.property=abc 

当我运行应用程序时,我有一个错误:

无法将[java.lang.String]类型的值转换为必需类型[com.xxx.Property]:找不到匹配的编辑器或转换策略。

鉴于(大写):

 custom.property=ABC 

工作良好。

有没有办法绑定值不区分大小写的值? 像ABCAbcAbCabc任何模式都应该有效。

注意:我看到了这个问题 – Spring 3.0 MVC绑定Enums区分大小写,但在我的情况下,我有超过10个枚举/值(并期望有更多)类并实现10种不同的自定义属性绑定器会很痛苦,我需要一些通用的解决方案。

@Value@ConfigurationPropertiesfunction不匹配。 我无法强调@ConfigurationProperties如何优越。

首先,您可以在一个简单的POJO中设计您的配置,您可以在任何地方注入(而不是在注释中使用表达式,您可以轻松打破拼写错误)。 其次,元数据支持意味着您可以非常轻松地 在IDE中自行完成自己的密钥 。

最后,doc中描述的宽松绑定仅适用于@ConfigurationProperties@Value是一个Spring Frameworkfunction,并不知道轻松绑定。 我们打算在文档中更清楚地说明这一点 。

TL; DR abc@ConfigurationProperties但不与@Value一起@Value

值区分大小写(考虑从环境注入的密钥或密码),宽松绑定仅适用于密钥。 Java枚举名称也区分大小写( Aa是不同的值),您不希望压缩大小写。

只需在配置属性中使用正确的大小写即可。

在实际的世界中,这是有效的……

 public enum Property { A, a AB, ab, ABC, abc, ABCD, abcd, ABCDE, abcde; public boolean isA() { return this.equals(A) || this.equals(a); } public boolean isAB() { return this.equals(AB) || this.equals(ab); } ...etc... } 

..这确实打破了枚举的原则!