Restructure /configprops output

/configprops output now contains the prefix from @ConfigurationProperties as wells as bean name and actual properties

fixes #267
This commit is contained in:
Christian Dupuis 2014-01-28 14:41:24 +01:00
parent 0ecf7ed2a5
commit 07238b1ce8
2 changed files with 36 additions and 10 deletions

View File

@ -16,13 +16,16 @@
package org.springframework.boot.actuate.endpoint;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.BeansException;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
@ -65,28 +68,40 @@ public class ConfigurationPropertiesReportEndpoint extends
@Override
public Map<String, Object> invoke() {
Map<String, Object> beans = extract(this.context);
return beans;
return extract(this.context);
}
@SuppressWarnings("unchecked")
private Map<String, Object> extract(ApplicationContext context) {
Map<String, Object> result = new HashMap<String, Object>();
Map<String, Object> beans = context
.getBeansWithAnnotation(ConfigurationProperties.class);
// Serialize beans into map structure and sanitize values
ObjectMapper mapper = new ObjectMapper();
for (Map.Entry<String, Object> entry : beans.entrySet()) {
Map<String, Object> value = mapper.convertValue(entry.getValue(), Map.class);
beans.put(entry.getKey(), sanitize(value));
String beanName = entry.getKey();
Object bean = entry.getValue();
Map<String, Object> root = new HashMap<String, Object>();
root.put("prefix", extractPrefix(bean));
root.put("properties", sanitize(mapper.convertValue(bean, Map.class)));
result.put(beanName, root);
}
if (context.getParent() != null) {
beans.put("parent", extract(context.getParent()));
result.put("parent", extract(context.getParent()));
}
return beans;
return result;
}
private String extractPrefix(Object bean) {
ConfigurationProperties annotation = AnnotationUtils.findAnnotation(
bean.getClass(), ConfigurationProperties.class);
return (StringUtils.hasLength(annotation.value()) ? annotation.value()
: annotation.name());
}
@SuppressWarnings("unchecked")

View File

@ -44,13 +44,24 @@ public class ConfigurationPropertiesReportEndpointTests extends
@Test
@SuppressWarnings("unchecked")
public void testDefaultKeySanitization() throws Exception {
public void testNaming() throws Exception {
ConfigurationPropertiesReportEndpoint report = getEndpointBean();
// report.setKeysToSanitize(new String[] {});
Map<String, Object> properties = report.invoke();
Map<String, Object> nestedProperties = (Map<String, Object>) properties
.get("testProperties");
assertNotNull(nestedProperties);
assertEquals("test", nestedProperties.get("prefix"));
assertNotNull(nestedProperties.get("properties"));
}
@Test
@SuppressWarnings("unchecked")
public void testDefaultKeySanitization() throws Exception {
ConfigurationPropertiesReportEndpoint report = getEndpointBean();
Map<String, Object> properties = report.invoke();
Map<String, Object> nestedProperties = (Map<String, Object>) ((Map<String, Object>) properties
.get("testProperties")).get("properties");
assertNotNull(nestedProperties);
assertEquals("******", nestedProperties.get("dbPassword"));
assertEquals("654321", nestedProperties.get("myTestProperty"));
}
@ -61,8 +72,8 @@ public class ConfigurationPropertiesReportEndpointTests extends
ConfigurationPropertiesReportEndpoint report = getEndpointBean();
report.setKeysToSanitize(new String[] { "property" });
Map<String, Object> properties = report.invoke();
Map<String, Object> nestedProperties = (Map<String, Object>) properties
.get("testProperties");
Map<String, Object> nestedProperties = (Map<String, Object>) ((Map<String, Object>) properties
.get("testProperties")).get("properties");
assertNotNull(nestedProperties);
assertEquals("123456", nestedProperties.get("dbPassword"));
assertEquals("******", nestedProperties.get("myTestProperty"));