Browse Source

Apply default property inclusion to content

Previously, the setting was only applied to values. This worked
for POJOs but had no effect on maps.

Fixes gh-48343
pull/48366/head
Andy Wilkinson 2 weeks ago
parent
commit
e1d85b3678
  1. 8
      module/spring-boot-jackson/src/main/java/org/springframework/boot/jackson/autoconfigure/JacksonAutoConfiguration.java
  2. 8
      module/spring-boot-jackson/src/test/java/org/springframework/boot/jackson/autoconfigure/JacksonAutoConfigurationTests.java

8
module/spring-boot-jackson/src/main/java/org/springframework/boot/jackson/autoconfigure/JacksonAutoConfiguration.java

@ -29,6 +29,7 @@ import java.util.function.BiConsumer;
import java.util.stream.Stream; import java.util.stream.Stream;
import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.annotation.PropertyAccessor;
import org.jspecify.annotations.Nullable; import org.jspecify.annotations.Nullable;
import tools.jackson.databind.JacksonModule; import tools.jackson.databind.JacksonModule;
@ -371,9 +372,10 @@ public final class JacksonAutoConfiguration {
if (this.jacksonProperties.isFindAndAddModules()) { if (this.jacksonProperties.isFindAndAddModules()) {
builder.findAndAddModules(getClass().getClassLoader()); builder.findAndAddModules(getClass().getClassLoader());
} }
if (this.jacksonProperties.getDefaultPropertyInclusion() != null) { Include propertyInclusion = this.jacksonProperties.getDefaultPropertyInclusion();
builder.changeDefaultPropertyInclusion( if (propertyInclusion != null) {
(handler) -> handler.withValueInclusion(this.jacksonProperties.getDefaultPropertyInclusion())); builder.changeDefaultPropertyInclusion((handler) -> handler.withValueInclusion(propertyInclusion)
.withContentInclusion(propertyInclusion));
} }
if (this.jacksonProperties.getTimeZone() != null) { if (this.jacksonProperties.getTimeZone() != null) {
builder.defaultTimeZone(this.jacksonProperties.getTimeZone()); builder.defaultTimeZone(this.jacksonProperties.getTimeZone());

8
module/spring-boot-jackson/src/test/java/org/springframework/boot/jackson/autoconfigure/JacksonAutoConfigurationTests.java

@ -436,9 +436,11 @@ class JacksonAutoConfigurationTests {
@EnumSource @EnumSource
@ParameterizedTest @ParameterizedTest
void defaultSerializationInclusion(MapperType mapperType) { void defaultPropertyInclusion(MapperType mapperType) {
this.contextRunner.run((context) -> { this.contextRunner.run((context) -> {
ObjectMapper mapper = mapperType.getMapper(context); ObjectMapper mapper = mapperType.getMapper(context);
assertThat(mapper.serializationConfig().getDefaultPropertyInclusion().getContentInclusion())
.isEqualTo(JsonInclude.Include.USE_DEFAULTS);
assertThat(mapper.serializationConfig().getDefaultPropertyInclusion().getValueInclusion()) assertThat(mapper.serializationConfig().getDefaultPropertyInclusion().getValueInclusion())
.isEqualTo(JsonInclude.Include.USE_DEFAULTS); .isEqualTo(JsonInclude.Include.USE_DEFAULTS);
}); });
@ -446,9 +448,11 @@ class JacksonAutoConfigurationTests {
@EnumSource @EnumSource
@ParameterizedTest @ParameterizedTest
void customSerializationInclusion(MapperType mapperType) { void customPropertyInclusion(MapperType mapperType) {
this.contextRunner.withPropertyValues("spring.jackson.default-property-inclusion:non_null").run((context) -> { this.contextRunner.withPropertyValues("spring.jackson.default-property-inclusion:non_null").run((context) -> {
ObjectMapper mapper = mapperType.getMapper(context); ObjectMapper mapper = mapperType.getMapper(context);
assertThat(mapper.serializationConfig().getDefaultPropertyInclusion().getContentInclusion())
.isEqualTo(JsonInclude.Include.NON_NULL);
assertThat(mapper.serializationConfig().getDefaultPropertyInclusion().getValueInclusion()) assertThat(mapper.serializationConfig().getDefaultPropertyInclusion().getValueInclusion())
.isEqualTo(JsonInclude.Include.NON_NULL); .isEqualTo(JsonInclude.Include.NON_NULL);
}); });

Loading…
Cancel
Save