Browse Source

Add properties for format-agnostic read and write features

Signed-off-by: michaldo <michaldo@github.com>

See gh-48870
pull/48906/head
michaldo 4 weeks ago committed by Andy Wilkinson
parent
commit
9c15debfb2
  1. 2
      module/spring-boot-jackson/src/main/java/org/springframework/boot/jackson/autoconfigure/JacksonAutoConfiguration.java
  2. 20
      module/spring-boot-jackson/src/main/java/org/springframework/boot/jackson/autoconfigure/JacksonProperties.java
  3. 18
      module/spring-boot-jackson/src/test/java/org/springframework/boot/jackson/autoconfigure/JacksonAutoConfigurationTests.java

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

@ -158,6 +158,8 @@ public final class JacksonAutoConfiguration { @@ -158,6 +158,8 @@ public final class JacksonAutoConfiguration {
@Override
public void customize(JsonMapper.Builder builder) {
super.customize(builder);
configureFeatures(builder, properties().getRead(), builder::configure);
configureFeatures(builder, properties().getWrite(), builder::configure);
configureFeatures(builder, properties().getJson().getRead(), builder::configure);
configureFeatures(builder, properties().getJson().getWrite(), builder::configure);
}

20
module/spring-boot-jackson/src/main/java/org/springframework/boot/jackson/autoconfigure/JacksonProperties.java

@ -25,6 +25,8 @@ import com.fasterxml.jackson.annotation.JsonAutoDetect; @@ -25,6 +25,8 @@ import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import org.jspecify.annotations.Nullable;
import tools.jackson.core.StreamReadFeature;
import tools.jackson.core.StreamWriteFeature;
import tools.jackson.core.json.JsonReadFeature;
import tools.jackson.core.json.JsonWriteFeature;
import tools.jackson.databind.DeserializationFeature;
@ -123,6 +125,16 @@ public class JacksonProperties { @@ -123,6 +125,16 @@ public class JacksonProperties {
private final Datatype datatype = new Datatype();
/**
* Jackson on/off token reader features common to multiple formats.
*/
private final Map<StreamReadFeature, Boolean> read = new EnumMap<>(StreamReadFeature.class);
/**
* Jackson on/off token writer features common to multiple formats.
*/
private final Map<StreamWriteFeature, Boolean> write = new EnumMap<>(StreamWriteFeature.class);
private final Json json = new Json();
public @Nullable String getDateFormat() {
@ -217,6 +229,14 @@ public class JacksonProperties { @@ -217,6 +229,14 @@ public class JacksonProperties {
return this.datatype;
}
public Map<StreamReadFeature, Boolean> getRead() {
return this.read;
}
public Map<StreamWriteFeature, Boolean> getWrite() {
return this.write;
}
public Json getJson() {
return this.json;
}

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

@ -347,6 +347,24 @@ class JacksonAutoConfigurationTests { @@ -347,6 +347,24 @@ class JacksonAutoConfigurationTests {
});
}
@Test
void enableWriteBigDecimalAsPlain() {
this.contextRunner.withPropertyValues("spring.jackson.write.write-bigdecimal-as-plain:true").run((context) -> {
JsonMapper mapper = context.getBean(JsonMapper.class);
assertThat(StreamWriteFeature.WRITE_BIGDECIMAL_AS_PLAIN.enabledByDefault()).isFalse();
assertThat(mapper.isEnabled(StreamWriteFeature.WRITE_BIGDECIMAL_AS_PLAIN)).isTrue();
});
}
@Test
void enableStringDuplicateDetection() {
this.contextRunner.withPropertyValues("spring.jackson.read.strict-duplicate-detection:true").run((context) -> {
JsonMapper mapper = context.getBean(JsonMapper.class);
assertThat(StreamReadFeature.STRICT_DUPLICATE_DETECTION.enabledByDefault()).isFalse();
assertThat(mapper.isEnabled(StreamReadFeature.STRICT_DUPLICATE_DETECTION)).isTrue();
});
}
@EnumSource
@ParameterizedTest
void enableDatetimeFeature(MapperType mapperType) {

Loading…
Cancel
Save