Commit 189e07e9 authored by Madhura Bhave's avatar Madhura Bhave

Support values other than String in /env

Fixes gh-9079
parent 216506d2
...@@ -69,7 +69,8 @@ public class EnvironmentEndpoint extends AbstractEndpoint<Map<String, Object>> { ...@@ -69,7 +69,8 @@ public class EnvironmentEndpoint extends AbstractEndpoint<Map<String, Object>> {
EnumerablePropertySource<?> enumerable = (EnumerablePropertySource<?>) source; EnumerablePropertySource<?> enumerable = (EnumerablePropertySource<?>) source;
Map<String, Object> properties = new LinkedHashMap<String, Object>(); Map<String, Object> properties = new LinkedHashMap<String, Object>();
for (String name : enumerable.getPropertyNames()) { for (String name : enumerable.getPropertyNames()) {
properties.put(name, sanitize(name, resolver.getProperty(name))); Object resolved = resolver.getProperty(name, Object.class);
properties.put(name, sanitize(name, resolved));
} }
properties = postProcessSourceProperties(sourceName, properties); properties = postProcessSourceProperties(sourceName, properties);
if (properties != null) { if (properties != null) {
......
...@@ -93,7 +93,7 @@ public class EnvironmentMvcEndpoint extends EndpointMvcAdapter ...@@ -93,7 +93,7 @@ public class EnvironmentMvcEndpoint extends EndpointMvcAdapter
@Override @Override
protected Object getOptionalValue(Environment source, String name) { protected Object getOptionalValue(Environment source, String name) {
Object result = ((EnvironmentEndpoint) getDelegate()).getResolver().getProperty(name); Object result = ((EnvironmentEndpoint) getDelegate()).getResolver().getProperty(name, Object.class);
if (result != null) { if (result != null) {
result = ((EnvironmentEndpoint) getDelegate()).sanitize(name, result); result = ((EnvironmentEndpoint) getDelegate()).sanitize(name, result);
} }
...@@ -102,7 +102,7 @@ public class EnvironmentMvcEndpoint extends EndpointMvcAdapter ...@@ -102,7 +102,7 @@ public class EnvironmentMvcEndpoint extends EndpointMvcAdapter
@Override @Override
protected Object getValue(Environment source, String name) { protected Object getValue(Environment source, String name) {
String result = source.getProperty(name); Object result = source.getProperty(name, Object.class);
if (result == null) { if (result == null) {
throw new NoSuchPropertyException("No such property: " + name); throw new NoSuchPropertyException("No such property: " + name);
} }
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
package org.springframework.boot.actuate.endpoint; package org.springframework.boot.actuate.endpoint;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.junit.After; import org.junit.After;
...@@ -29,6 +30,7 @@ import org.springframework.context.annotation.Bean; ...@@ -29,6 +30,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.CompositePropertySource; import org.springframework.core.env.CompositePropertySource;
import org.springframework.core.env.MapPropertySource; import org.springframework.core.env.MapPropertySource;
import org.springframework.core.env.MutablePropertySources;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
...@@ -255,6 +257,24 @@ public class EnvironmentEndpointTests extends AbstractEndpointTests<EnvironmentE ...@@ -255,6 +257,24 @@ public class EnvironmentEndpointTests extends AbstractEndpointTests<EnvironmentE
assertThat(testProperties.get("my.foo")).isEqualTo("http://${bar.password}://hello"); assertThat(testProperties.get("my.foo")).isEqualTo("http://${bar.password}://hello");
} }
@SuppressWarnings("unchecked")
@Test
public void propertyWithTypeOtherThanStringShouldNotFail() throws Exception {
this.context = new AnnotationConfigApplicationContext();
MutablePropertySources propertySources = this.context.getEnvironment().getPropertySources();
Map<String, Object> source = new HashMap<String, Object>();
source.put("foo", Collections.singletonMap("bar", "baz"));
propertySources.addFirst(new MapPropertySource("test", source));
this.context.register(Config.class);
this.context.refresh();
EnvironmentEndpoint report = getEndpointBean();
Map<String, Object> env = report.invoke();
Map<String, Object> testProperties = (Map<String, Object>) env
.get("test");
Map<String, String> foo = (Map<String, String>) testProperties.get("foo");
assertThat(foo.get("bar")).isEqualTo("baz");
}
@Configuration @Configuration
@EnableConfigurationProperties @EnableConfigurationProperties
public static class Config { public static class Config {
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
package org.springframework.boot.actuate.endpoint.mvc; package org.springframework.boot.actuate.endpoint.mvc;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -39,6 +40,7 @@ import org.springframework.context.annotation.Configuration; ...@@ -39,6 +40,7 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource; import org.springframework.core.env.MapPropertySource;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext;
...@@ -160,6 +162,18 @@ public class EnvironmentMvcEndpointTests { ...@@ -160,6 +162,18 @@ public class EnvironmentMvcEndpointTests {
.andExpect(content().string(containsString("\"my.foo\":\"******\""))); .andExpect(content().string(containsString("\"my.foo\":\"******\"")));
} }
@SuppressWarnings("unchecked")
@Test
public void propertyWithTypeOtherThanStringShouldNotFail() throws Exception {
ConfigurableEnvironment environment = (ConfigurableEnvironment) this.context.getEnvironment();
MutablePropertySources propertySources = environment.getPropertySources();
Map<String, Object> source = new HashMap<String, Object>();
source.put("foo", Collections.singletonMap("bar", "baz"));
propertySources.addFirst(new MapPropertySource("test", source));
this.mvc.perform(get("/env/foo.*")).andExpect(status().isOk())
.andExpect(content().string("{\"foo\":{\"bar\":\"baz\"}}"));
}
@Configuration @Configuration
@Import({ JacksonAutoConfiguration.class, @Import({ JacksonAutoConfiguration.class,
HttpMessageConvertersAutoConfiguration.class, WebMvcAutoConfiguration.class, HttpMessageConvertersAutoConfiguration.class, WebMvcAutoConfiguration.class,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment