枚举
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
工作正常。
有没有办法绑定不区分大小写的值?像 ABC 、 Abc 、 AbC 、 abc 一样,任何模式都应该有效。
注意:我看到了这个问题 - Spring 3.0 MVC binding Enums Case Sensitive 但在我的例子中我有超过 10 个枚举/值(并且期望有更多)类并且实现 10 个不同的自定义属性绑定器会很痛苦,我需要一些通用的解决方案.
原文由 Mikhail Kholodkov 发布,翻译遵循 CC BY-SA 4.0 许可协议
@Value
和@ConfigurationProperties
功能不匹配。我怎么强调@ConfigurationProperties
是多么的优越。首先,您可以在一个简单的 POJO 中设计您的配置,您可以将其注入到您想要的任何地方(而不是在注释中使用容易因打字错误而中断的表达式)。其次,元数据支持意味着您可以 非常轻松地 在您的 IDE 中为您自己的键自动完成。
最后,文档中描述的宽松绑定仅适用于
@ConfigurationProperties
。@Value
是一个 Spring Framework 功能,不知道松散绑定。我们 打算在文档中更清楚地说明这一点。TL;DR
abc
适用于@ConfigurationProperties
但不适用于@Value
。