diff --git a/spring-boot/src/main/java/org/springframework/boot/config/YamlProcessor.java b/spring-boot/src/main/java/org/springframework/boot/config/YamlProcessor.java index a33a18dc9d3..15eb89d5895 100644 --- a/spring-boot/src/main/java/org/springframework/boot/config/YamlProcessor.java +++ b/spring-boot/src/main/java/org/springframework/boot/config/YamlProcessor.java @@ -169,13 +169,17 @@ public class YamlProcessor { Map result = new LinkedHashMap(); Map map = (Map) object; for (Entry entry : map.entrySet()) { + Object value = entry.getValue(); + if (value instanceof Map) { + value = asMap(value); + } Object key = entry.getKey(); if (key instanceof CharSequence) { - result.put(key.toString(), entry.getValue()); + result.put(key.toString(), value); } else { // It has to be a map key in this case - result.put("[" + key.toString() + "]", entry.getValue()); + result.put("[" + key.toString() + "]", value); } } return result; diff --git a/spring-boot/src/test/java/org/springframework/boot/config/YamlProcessorTests.java b/spring-boot/src/test/java/org/springframework/boot/config/YamlProcessorTests.java index 11638fa88ec..ea3570f6b4c 100644 --- a/spring-boot/src/test/java/org/springframework/boot/config/YamlProcessorTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/config/YamlProcessorTests.java @@ -76,4 +76,17 @@ public class YamlProcessorTests { }); } + @Test + public void integerDeepKeyBehaves() { + this.processor.setResources(new Resource[] { new ByteArrayResource( + "foo:\n 1: bar".getBytes()) }); + this.processor.process(new MatchCallback() { + + @Override + public void process(Properties properties, Map map) { + assertEquals("bar", properties.get("foo[1]")); + assertEquals(1, properties.size()); + } + }); + } }