一尘不染

Spring Boot将@Value绑定到枚举不区分大小写

spring-boot

枚举

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绑定枚举区分大小写,但就我而言,我有10个以上的枚举/值(并希望有更多)类,并且要实现10个不同的自定义属性绑定器会很痛苦,我需要一些通用的解决方案。


阅读 1663

收藏
2020-05-30

共1个答案

一尘不染

@Value@ConfigurationProperties功能不匹配。我无法承受足够的压力@ConfigurationProperties

首先,您可以在一个简单的POJO中设计您的配置,该POJO可以注入到您想要的任何位置(而不是在批注中包含易于被拼写错误打断的表达式)。其次,元数据支持意味着您可以
非常轻松地 在IDE中为自己的密钥自动完成

最后,文档中描述的宽松绑定仅适用于@ConfigurationProperties@Value是Spring
Framework的功能,并且没有意识到宽松的绑定。我们打算在文档中更清楚地说明这一点

TL; DR abc可以使用,@ConfigurationProperties但不能使用@Value

2020-05-30