带有密钥 URL 的 Spring Boot YAML 配置不再使用版本 2 正确加载
Posted
技术标签:
【中文标题】带有密钥 URL 的 Spring Boot YAML 配置不再使用版本 2 正确加载【英文标题】:Spring Boot YAML configuration with URL in key no longer loads correctly with version 2 【发布时间】:2018-11-27 08:43:33 【问题描述】:我正在将我的应用程序从 Spring Boot 1.5 迁移到 2.0,并且 YAML 属性之一不再正确加载。以下配置sn -p:
myapp
serviceUrls:
'https://example.org/test': 'https://test.example.org/Endpoint'
映射到这个配置类:
@ConfigurationProperties(prefix = "myapp", ignoreUnknownFields = false)
public final class MyAppProperties
private Map<String, String> serviceUrls = new HashMap<>();
//[...]
在 Spring Boot 1.5 中,它加载为带有 https://example.org/test
-> https://test.example.org/Endpoint
的地图;
但在 Spring Boot 2.0 中,冒号和斜杠从映射键 httpsexample.orgtest
-> https://test.example.org/Endpoint
中消失。
我在migration guide 中找不到任何提及。 Spring Boot 2 中的 YAML 解析是否发生了变化?有没有更好的方法来编写以 URL 作为键的 YAML 映射?
【问题讨论】:
你试过双引号或反斜杠吗? YAML 语法有时令人惊讶。 @KonstantinPelepelin 是的,我都试过了,但我的钥匙仍然损坏。更奇怪的是,提供给org.yaml.snakeyaml.Yaml#load
的相同字符串确实产生了预期的结果......
【参考方案1】:
我应该检查 GitHub 问题...有人报告了 a similar problem。解决方案是使用“括号语法”,不幸的是barely documented,将键包裹在括号内:
myapp
serviceUrls:
'[https://example.org/test]': 'https://test.example.org/Endpoint'
【讨论】:
以上是关于带有密钥 URL 的 Spring Boot YAML 配置不再使用版本 2 正确加载的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot - 如何通过带有查询参数的 url 发送 POST 请求并将响应存储在方法中?
测试期间的Spring Boot JPA事务 - 不会在插入时抛出密钥违例异常