From cc1578aecb5509444cde5f72ffe328672025ae48 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 9 Mar 2026 20:03:05 -0700 Subject: [PATCH] Allow empty objects to be loaded from YAML Update `OriginTrackedYamlLoader` so that empty objects are retained in the resulting `PropertySource`. Closes gh-48958 --- .../boot/env/OriginTrackedYamlLoader.java | 2 +- .../boot/env/OriginTrackedYamlLoaderTests.java | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/core/spring-boot/src/main/java/org/springframework/boot/env/OriginTrackedYamlLoader.java b/core/spring-boot/src/main/java/org/springframework/boot/env/OriginTrackedYamlLoader.java index 25818122533..82f1811acf2 100644 --- a/core/spring-boot/src/main/java/org/springframework/boot/env/OriginTrackedYamlLoader.java +++ b/core/spring-boot/src/main/java/org/springframework/boot/env/OriginTrackedYamlLoader.java @@ -82,7 +82,7 @@ class OriginTrackedYamlLoader extends YamlProcessor { List> load() { List> result = new ArrayList<>(); - process((properties, map) -> result.add(getFlattenedMap(map))); + process((properties, map) -> result.add(getFlattenedMap(map, true, ""))); return result; } diff --git a/core/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedYamlLoaderTests.java b/core/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedYamlLoaderTests.java index 29e22300794..0c0296bd800 100644 --- a/core/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedYamlLoaderTests.java +++ b/core/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedYamlLoaderTests.java @@ -39,6 +39,7 @@ import org.springframework.core.io.Resource; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.api.Assertions.entry; /** * Tests for {@link OriginTrackedYamlLoader}. @@ -154,9 +155,8 @@ class OriginTrackedYamlLoaderTests { @Test @WithTestYamlResource - void emptyMapsAreDropped() { - Object emptyMap = getValue("emptymap"); - assertThat(emptyMap).isNull(); + void emptyMapsOrObjectsAreNotDropped() { + assertThat(getFirstResult()).contains(entry("emptymap", "")); } @Test @@ -250,10 +250,15 @@ class OriginTrackedYamlLoaderTests { @SuppressWarnings("unchecked") private @Nullable T getValue(String name) { + return (T) getFirstResult().get(name); + } + + private Map getFirstResult() { if (this.result == null) { this.result = this.loader.load(); } - return (T) this.result.get(0).get(name); + Map map = this.result.get(0); + return map; } private String getLocation(OriginTrackedValue value) {