Mik*_*kov 13 java enums spring spring-boot spring-properties
枚举
public enum Property {
A,
AB,
ABC;
}
Run Code Online (Sandbox Code Playgroud)
领域
@Value("${custom.property}")
protected Property property;
Run Code Online (Sandbox Code Playgroud)
application.properties(小写)
custom.property=abc
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,我有一个错误:
无法将[java.lang.String]类型的值转换为必需的类型[com.xxx.Property]:找不到匹配的编辑器或转换策略.
鉴于(大写):
custom.property=ABC
Run Code Online (Sandbox Code Playgroud)
工作良好.
有没有办法绑定值不区分大小写的值?像ABC,Abc,AbC,abc任何模式都应该有效.
注:我看到这个问题- 春季3.0 MVC结合枚举大小写敏感的,但在我的情况我有超过10枚举/值(并期望有更多)班,并实施10层不同的自定义属性的粘合剂将是痛苦的,我需要一些通用的解决方案.
Ste*_*oll 13
@Value
和@ConfigurationProperties
功能不匹配.我不能强调如何@ConfigurationProperties
优越.
首先,您可以在一个简单的POJO中设计您的配置,您可以在任何地方注入(而不是在注释中使用表达式,您可以轻松打破拼写错误).其次,元数据支持意味着您可以非常轻松地 在IDE中自动完成自己的密钥.
最后,文档中描述的轻松绑定仅适用于@ConfigurationProperties
.@Value
是一个Spring Framework功能,并不知道轻松绑定.我们打算在文档中更清楚地说明.
TL; DR abc
可以使用,@ConfigurationProperties
但不会使用@Value
.
ConfigurationPropertis 的一个问题(据我所知)是您不能使用构造函数注入,并且您的类必须是可变的。
一种解决方法(如果您愿意,也可以称为 hack)是在查找属性之前使用 SpEL 将属性大写,如下所示:
@Value("#{'${custom.property}'.toUpperCase()}") Property property
这应该有效,因为枚举实例是常量,并且应始终以大写形式定义: https: //docs.oracle.com/javase/tutorial/java/javaOO/enum.html
归档时间: |
|
查看次数: |
17105 次 |
最近记录: |