Skip to content

Commit bdf76b2

Browse files
snicollwilkinsona
andcommitted
Restore nested property resolution for non CharSequence types
Closes gh-33727 Co-authored-by: Andy Wilkinson <[email protected]>
1 parent cbdfe81 commit bdf76b2

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

spring-core/src/main/java/org/springframework/core/env/PropertySourcesPropertyResolver.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,14 @@ protected <T> T getProperty(String key, Class<T> targetValueType, boolean resolv
8484
}
8585
Object value = propertySource.getProperty(key);
8686
if (value != null) {
87-
if (resolveNestedPlaceholders &&
88-
(String.class.equals(targetValueType) || CharSequence.class.equals(targetValueType)) &&
89-
value instanceof CharSequence cs) {
90-
value = resolveNestedPlaceholders(cs.toString());
87+
if (resolveNestedPlaceholders) {
88+
if (value instanceof String string) {
89+
value = resolveNestedPlaceholders(string);
90+
}
91+
else if ((value instanceof CharSequence cs) && (String.class.equals(targetValueType) ||
92+
CharSequence.class.equals(targetValueType))) {
93+
value = resolveNestedPlaceholders(cs.toString());
94+
}
9195
}
9296
logKeyFound(key, propertySource, value);
9397
return convertValueIfNecessary(value, targetValueType);

spring-core/src/test/java/org/springframework/core/env/PropertySourcesPropertyResolverTests.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,14 @@ void resolveNestedPlaceholdersIfValueIsCharSequenceAndStringBuilderIsRequested()
325325
.hasToString("${p1}:${p2}");
326326
}
327327

328+
@Test // gh-33727
329+
void resolveNestedPlaceHolderIfValueShouldConvertToOtherTypes() {
330+
MutablePropertySources ps = new MutablePropertySources();
331+
ps.addFirst(new MockPropertySource().withProperty("new.enabled", "${old.enabled:true}"));
332+
ConfigurablePropertyResolver pr = new PropertySourcesPropertyResolver(ps);
333+
assertThat(pr.getProperty("new.enabled", Boolean.class, false)).isTrue();
334+
}
335+
328336
@Test
329337
void ignoreUnresolvableNestedPlaceholdersIsConfigurable() {
330338
MutablePropertySources ps = new MutablePropertySources();

0 commit comments

Comments
 (0)