13

I'm migrating my application from Spring Boot 1.5 to 2.0 and one of the YAML properties no longer loads correctly. The following configuration snippet:

myapp
  serviceUrls:
    'https://example.org/test': 'https://test.example.org/Endpoint'

is mapped to this configuration class:

@ConfigurationProperties(prefix = "myapp", ignoreUnknownFields = false)
public final class MyAppProperties {
  private Map<String, String> serviceUrls = new HashMap<>();
  //[...]
}
  • With Spring Boot 1.5, it loads as a map with https://example.org/test -> https://test.example.org/Endpoint;
  • but with Spring Boot 2.0, the colons and slashes disappear from map keys httpsexample.orgtest -> https://test.example.org/Endpoint.

I couldn't find any mention of this in the migration guide. Has YAML parsing changed in Spring Boot 2? Is there a better way to write YAML maps with URLs as keys?

Kolargol00
  • 1,697
  • 2
  • 17
  • 21
  • Hane you tried double quotes or backslashes? YAML syntax is surprising sometimes. – Konstantin Pelepelin Jun 18 '18 at 14:19
  • @KonstantinPelepelin Yes, I tried both and my key still gets mangled. It's weirder since the same string fed to `org.yaml.snakeyaml.Yaml#load` does produce the expected result... – Kolargol00 Jun 18 '18 at 14:45

1 Answers1

26

I should have checked GitHub issues... someone reported a similar problem. The solution is to use the "bracket syntax", which is unfortunately barely documented, wrapping the keys within brackets:

myapp
  serviceUrls:
    '[https://example.org/test]': 'https://test.example.org/Endpoint'
Kolargol00
  • 1,697
  • 2
  • 17
  • 21