From cc996ce7f97fc5795fb728aa0f7e418c3fbe36f8 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Fri, 10 Jan 2014 15:53:17 +0000 Subject: [PATCH] Extend YAML map key special cases to nested maps Fixes gh-208 --- .../springframework/boot/config/YamlProcessor.java | 8 ++++++-- .../boot/config/YamlProcessorTests.java | 13 +++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) 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()); + } + }); + } }