From 47d85bb4fe3bdf9b9fb77486bf2568349c745749 Mon Sep 17 00:00:00 2001 From: dreis2211 Date: Thu, 11 Apr 2019 18:31:07 +0200 Subject: [PATCH] Add Duration support in /configprops endpoint See gh-16539 --- ...ConfigurationPropertiesReportEndpoint.java | 3 +++ ...gurationPropertiesReportEndpointTests.java | 21 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpoint.java index 669c85c5a0..d56d15d877 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpoint.java @@ -41,6 +41,7 @@ import com.fasterxml.jackson.databind.ser.PropertyWriter; import com.fasterxml.jackson.databind.ser.SerializerFactory; import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter; import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -172,10 +173,12 @@ public class ConfigurationPropertiesReportEndpoint implements ApplicationContext */ protected void configureObjectMapper(ObjectMapper mapper) { mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); mapper.configure(MapperFeature.USE_STD_BEAN_NAMING, true); mapper.setSerializationInclusion(Include.NON_NULL); applyConfigurationPropertiesFilter(mapper); applySerializationModifier(mapper); + mapper.registerModule(new JavaTimeModule()); } private ObjectMapper getObjectMapper() { diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointTests.java index 9abb709e12..12f5feec1f 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointTests.java @@ -16,6 +16,7 @@ package org.springframework.boot.actuate.context.properties; +import java.time.Duration; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -157,6 +158,16 @@ public class ConfigurationPropertiesReportEndpointTests { }); } + @Test + public void duration() { + load((context, properties) -> { + Map nestedProperties = properties.getBeans() + .get("testProperties").getProperties(); + assertThat(nestedProperties.get("duration")) + .isEqualTo(Duration.ofSeconds(10).toString()); + }); + } + @Test public void singleLetterProperty() { load((context, properties) -> { @@ -276,6 +287,8 @@ public class ConfigurationPropertiesReportEndpointTests { private String nullValue = null; + private Duration duration = Duration.ofSeconds(10); + public TestProperties() { this.secrets.put("mine", "myPrivateThing"); this.secrets.put("yours", "yourPrivateThing"); @@ -379,6 +392,14 @@ public class ConfigurationPropertiesReportEndpointTests { this.nullValue = nullValue; } + public Duration getDuration() { + return this.duration; + } + + public void setDuration(Duration duration) { + this.duration = duration; + } + public static class Hidden { private String mine = "mySecret";