diff --git a/spring-boot-docs/src/main/asciidoc/appendix-configuration-metadata.adoc b/spring-boot-docs/src/main/asciidoc/appendix-configuration-metadata.adoc index 7d8b8121c5..78ac616283 100644 --- a/spring-boot-docs/src/main/asciidoc/appendix-configuration-metadata.adoc +++ b/spring-boot-docs/src/main/asciidoc/appendix-configuration-metadata.adoc @@ -144,8 +144,9 @@ The JSON object contained in the `properties` array can contain the following at |`defaultValue` | Object -| The default value which will be used if the property is not specified. May be omitted - if the default value is not known. +| The default value which will be used if the property is not specified. Can also be an + array of value(s) if the type of the property is an array. May be omitted if the default + value is not known. |`deprecated` | boolean diff --git a/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/fieldvalues/javac/JavaCompilerFieldValuesParser.java b/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/fieldvalues/javac/JavaCompilerFieldValuesParser.java index ae4b51a1c7..cbba66f39a 100644 --- a/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/fieldvalues/javac/JavaCompilerFieldValuesParser.java +++ b/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/fieldvalues/javac/JavaCompilerFieldValuesParser.java @@ -124,7 +124,11 @@ public class JavaCompilerFieldValuesParser implements FieldValuesParser { if (arrayValues != null) { Object[] result = new Object[arrayValues.size()]; for (int i = 0; i < arrayValues.size(); i++) { - result[i] = getValue(arrayValues.get(i), null); + Object value = getValue(arrayValues.get(i), null); + if (value == null) { // One of the elements could not be resolved + return defaultValue; + } + result[i] = value; } return result; } diff --git a/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/fieldvalues/AbstractFieldValuesProcessorTests.java b/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/fieldvalues/AbstractFieldValuesProcessorTests.java index 536ad78c12..88ed12cf37 100644 --- a/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/fieldvalues/AbstractFieldValuesProcessorTests.java +++ b/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/fieldvalues/AbstractFieldValuesProcessorTests.java @@ -84,6 +84,7 @@ public abstract class AbstractFieldValuesProcessorTests { assertThat(values.get("stringArrayConst"), equalToObject(new Object[]{"OK", "KO"})); assertThat(values.get("stringArrayConstElements"), equalToObject(new Object[] {"c"})); assertThat(values.get("integerArray"), equalToObject(new Object[] {42, 24})); + assertThat(values.get("unknownArray"), nullValue()); } private Matcher equalToObject(Object object) { diff --git a/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/fieldvalues/FieldValues.java b/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/fieldvalues/FieldValues.java index 655e352ca8..c1926265ff 100644 --- a/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/fieldvalues/FieldValues.java +++ b/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/fieldvalues/FieldValues.java @@ -90,4 +90,6 @@ public class FieldValues { private Integer[] integerArray = new Integer[] {42, 24}; + private FieldValues[] unknownArray = new FieldValues[] {new FieldValues()}; + }