Skip to content

Commit 07dd388

Browse files
committed
Merge branch '2.7.x'
Closes gh-32776
2 parents 02cd910 + 8dec296 commit 07dd388

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpoint.java

+15-1
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,15 @@
4040
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;
4141
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
4242
import com.fasterxml.jackson.databind.json.JsonMapper;
43+
import com.fasterxml.jackson.databind.module.SimpleModule;
4344
import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
4445
import com.fasterxml.jackson.databind.ser.BeanSerializerFactory;
4546
import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
4647
import com.fasterxml.jackson.databind.ser.PropertyWriter;
4748
import com.fasterxml.jackson.databind.ser.SerializerFactory;
4849
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
4950
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
51+
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
5052
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
5153
import org.apache.commons.logging.Log;
5254
import org.apache.commons.logging.LogFactory;
@@ -78,6 +80,7 @@
7880
import org.springframework.core.env.PropertySource;
7981
import org.springframework.util.ClassUtils;
8082
import org.springframework.util.StringUtils;
83+
import org.springframework.util.unit.DataSize;
8184

8285
/**
8386
* {@link Endpoint @Endpoint} to expose application properties from
@@ -175,12 +178,12 @@ protected void configureJsonMapper(JsonMapper.Builder builder) {
175178
builder.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
176179
builder.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
177180
builder.configure(SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS, false);
178-
JsonMapper.builder();
179181
builder.configure(MapperFeature.USE_STD_BEAN_NAMING, true);
180182
builder.serializationInclusion(Include.NON_NULL);
181183
applyConfigurationPropertiesFilter(builder);
182184
applySerializationModifier(builder);
183185
builder.addModule(new JavaTimeModule());
186+
builder.addModule(new ConfigurationPropertiesModule());
184187
}
185188

186189
private void applyConfigurationPropertiesFilter(JsonMapper.Builder builder) {
@@ -463,6 +466,17 @@ public void serializeAsField(Object pojo, JsonGenerator jgen, SerializerProvider
463466

464467
}
465468

469+
/**
470+
* {@link SimpleModule} for configure the serializer.
471+
*/
472+
private static final class ConfigurationPropertiesModule extends SimpleModule {
473+
474+
private ConfigurationPropertiesModule() {
475+
addSerializer(DataSize.class, ToStringSerializer.instance);
476+
}
477+
478+
}
479+
466480
/**
467481
* {@link BeanSerializerModifier} to return only relevant configuration properties.
468482
*/

spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointTests.java

+34
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import org.springframework.context.annotation.Bean;
4848
import org.springframework.context.annotation.Configuration;
4949
import org.springframework.mock.env.MockPropertySource;
50+
import org.springframework.util.unit.DataSize;
5051

5152
import static org.assertj.core.api.Assertions.assertThat;
5253
import static org.assertj.core.api.Assertions.entry;
@@ -176,6 +177,18 @@ void descriptorWithMixedBooleanProperty() {
176177
}
177178

178179
@Test
180+
void descriptorWithDataSizeProperty() {
181+
String configSize = "1MB";
182+
String stringifySize = DataSize.parse(configSize).toString();
183+
this.contextRunner.withUserConfiguration(DataSizePropertiesConfiguration.class)
184+
.withPropertyValues(String.format("data.size=%s", configSize)).run(assertProperties("data",
185+
(properties) -> assertThat(properties.get("size")).isEqualTo(stringifySize), (inputs) -> {
186+
Map<String, Object> size = (Map<String, Object>) inputs.get("size");
187+
assertThat(size.get("value")).isEqualTo(configSize);
188+
assertThat(size.get("origin")).isEqualTo("\"data.size\" from property source \"test\"");
189+
}));
190+
}
191+
179192
void sanitizeLists() {
180193
new ApplicationContextRunner()
181194
.withUserConfiguration(EndpointConfigWithShowNever.class, SensiblePropertiesConfiguration.class)
@@ -702,6 +715,27 @@ public void setMixedBoolean(Boolean mixedBoolean) {
702715

703716
}
704717

718+
@Configuration(proxyBeanMethods = false)
719+
@EnableConfigurationProperties(DataSizeProperties.class)
720+
static class DataSizePropertiesConfiguration {
721+
722+
}
723+
724+
@ConfigurationProperties("data")
725+
public static class DataSizeProperties {
726+
727+
private DataSize size;
728+
729+
public DataSize getSize() {
730+
return this.size;
731+
}
732+
733+
public void setSize(DataSize size) {
734+
this.size = size;
735+
}
736+
737+
}
738+
705739
@Configuration(proxyBeanMethods = false)
706740
@EnableConfigurationProperties(Gh4415Properties.class)
707741
static class Gh4415PropertiesConfiguration {

0 commit comments

Comments
 (0)