使用2.0.3.RELEASE
将外部属性加载到spring boot(application.yaml
)应用程序时,我遇到奇怪的行为。我将展示一个最小的例子。我定义了一个@ConfigurationProperties
类,如下所示:
@Component
@ConfigurationProperties
class ConfigProperties {
var testString: String = ""
var testMap : MutableMap<String, String> = mutableMapOf()
}
我也有足够的application.yaml
文件:
testString: "/profile/test"
testMap:
"/profile/main" : "Welcome/to/profile"
经过评估,ConfigProperties.testString
会按预期生成/profile/test
,但是ConfigProperties.testMap
会生成一个大小为1的映射,其中唯一条目的键设置为profilemain
,值设置为{{1 }}。为什么键会忽略正斜杠(Welcome/to/profile
)但值已正确解析?我试图转义正斜杠,但这没有用。我还发现其他特殊字符,例如冒号(/
)和反斜杠(:
)也被map键忽略。
答案 0 :(得分:1)
我知道这已经很老了,但是如果其他人想知道,这就是在Spring Boot 2中的工作方式。
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide#relaxed-binding
For map keys with non-alphanumeric characters (other than -) in them, surround the key name with []. For example:
spring:
my-example:
'[foo.baz]': bar
'[abc xyz]': def