Browse Source

Allow empty objects to be loaded from YAML

Update `OriginTrackedYamlLoader` so that empty objects are retained
in the resulting `PropertySource`.

Closes gh-48958
pull/49541/head
Phillip Webb 1 week ago
parent
commit
cc1578aecb
  1. 2
      core/spring-boot/src/main/java/org/springframework/boot/env/OriginTrackedYamlLoader.java
  2. 13
      core/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedYamlLoaderTests.java

2
core/spring-boot/src/main/java/org/springframework/boot/env/OriginTrackedYamlLoader.java vendored

@ -82,7 +82,7 @@ class OriginTrackedYamlLoader extends YamlProcessor { @@ -82,7 +82,7 @@ class OriginTrackedYamlLoader extends YamlProcessor {
List<Map<String, Object>> load() {
List<Map<String, Object>> result = new ArrayList<>();
process((properties, map) -> result.add(getFlattenedMap(map)));
process((properties, map) -> result.add(getFlattenedMap(map, true, "")));
return result;
}

13
core/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedYamlLoaderTests.java vendored

@ -39,6 +39,7 @@ import org.springframework.core.io.Resource; @@ -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 { @@ -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 { @@ -250,10 +250,15 @@ class OriginTrackedYamlLoaderTests {
@SuppressWarnings("unchecked")
private <T> @Nullable T getValue(String name) {
return (T) getFirstResult().get(name);
}
private Map<String, Object> getFirstResult() {
if (this.result == null) {
this.result = this.loader.load();
}
return (T) this.result.get(0).get(name);
Map<String, Object> map = this.result.get(0);
return map;
}
private String getLocation(OriginTrackedValue value) {

Loading…
Cancel
Save