Ignore unresolvable nested placeholders
The NamePatternEnvironmentFilter used to throw an exception if placeholders in property values could not be resolved. Fixes gh-8510
This commit is contained in:
parent
f5aeac3658
commit
67068fc83d
|
@ -22,8 +22,10 @@ import org.springframework.context.EnvironmentAware;
|
|||
import org.springframework.core.env.ConfigurableEnvironment;
|
||||
import org.springframework.core.env.EnumerablePropertySource;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.core.env.PropertyResolver;
|
||||
import org.springframework.core.env.PropertySource;
|
||||
import org.springframework.core.env.PropertySources;
|
||||
import org.springframework.core.env.PropertySourcesPropertyResolver;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
|
@ -95,7 +97,14 @@ public class EnvironmentMvcEndpoint extends EndpointMvcAdapter
|
|||
|
||||
@Override
|
||||
protected Object getOptionalValue(Environment source, String name) {
|
||||
Object result = source.getProperty(name);
|
||||
PropertyResolver resolver = source;
|
||||
if (source instanceof ConfigurableEnvironment) {
|
||||
resolver = new PropertySourcesPropertyResolver(
|
||||
((ConfigurableEnvironment) source).getPropertySources());
|
||||
((PropertySourcesPropertyResolver) resolver)
|
||||
.setIgnoreUnresolvableNestedPlaceholders(true);
|
||||
}
|
||||
Object result = resolver.getProperty(name);
|
||||
if (result != null) {
|
||||
result = ((EnvironmentEndpoint) getDelegate()).sanitize(name, result);
|
||||
}
|
||||
|
|
|
@ -102,6 +102,16 @@ public class EnvironmentMvcEndpointTests {
|
|||
.andExpect(content().string(containsString("\"fool\":\"baz\"")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void nestedPathWhenPlaceholderCannotBeResolvedShouldReturnUnresolvedProperty() throws Exception {
|
||||
Map<String, Object> map = new HashMap<String, Object>();
|
||||
map.put("my.foo", "${my.bar}");
|
||||
((ConfigurableEnvironment) this.context.getEnvironment()).getPropertySources()
|
||||
.addFirst(new MapPropertySource("unresolved-placeholder", map));
|
||||
this.mvc.perform(get("/env/my.*")).andExpect(status().isOk())
|
||||
.andExpect(content().string(containsString("\"my.foo\":\"${my.bar}\"")));
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@Import({ JacksonAutoConfiguration.class,
|
||||
HttpMessageConvertersAutoConfiguration.class, WebMvcAutoConfiguration.class,
|
||||
|
|
Loading…
Reference in New Issue