diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.java b/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.java index f723935b043..128d3cd1b33 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.java +++ b/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.java @@ -44,6 +44,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.PropertyNamingStrategy; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.cfg.HandlerInstantiator; +import com.fasterxml.jackson.databind.jsontype.TypeResolverBuilder; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.FilterProvider; import com.fasterxml.jackson.dataformat.xml.XmlMapper; @@ -98,6 +99,8 @@ public class Jackson2ObjectMapperBuilder { private PropertyNamingStrategy propertyNamingStrategy; + private TypeResolverBuilder> defaultTyping; + private JsonInclude.Include serializationInclusion; private FilterProvider filters; @@ -216,6 +219,15 @@ public class Jackson2ObjectMapperBuilder { return this; } + /** + * Specify a {@link TypeResolverBuilder} to use for Jackson's default typing. + * @since 4.2.2 + */ + public Jackson2ObjectMapperBuilder defaultTyping(TypeResolverBuilder> typeResolverBuilder) { + this.defaultTyping = typeResolverBuilder; + return this; + } + /** * Set a custom inclusion strategy for serialization. * @see com.fasterxml.jackson.annotation.JsonInclude.Include @@ -523,6 +535,7 @@ public class Jackson2ObjectMapperBuilder { return this; } + /** * Build a new {@link ObjectMapper} instance. *
Each build operation produces an independent {@link ObjectMapper} instance.
@@ -588,6 +601,9 @@ public class Jackson2ObjectMapperBuilder {
if (this.propertyNamingStrategy != null) {
objectMapper.setPropertyNamingStrategy(this.propertyNamingStrategy);
}
+ if (this.defaultTyping != null) {
+ objectMapper.setDefaultTyping(this.defaultTyping);
+ }
if (this.serializationInclusion != null) {
objectMapper.setSerializationInclusion(this.serializationInclusion);
}
@@ -623,6 +639,7 @@ public class Jackson2ObjectMapperBuilder {
}
}
+
// Any change to this method should be also applied to spring-jms and spring-messaging
// MappingJackson2MessageConverter default constructors
private void customizeDefaultFeatures(ObjectMapper objectMapper) {
diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBean.java b/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBean.java
index fce6d9c375b..e273ef046f3 100644
--- a/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBean.java
+++ b/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBean.java
@@ -36,6 +36,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.cfg.HandlerInstantiator;
+import com.fasterxml.jackson.databind.jsontype.TypeResolverBuilder;
import com.fasterxml.jackson.databind.ser.FilterProvider;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
@@ -215,6 +216,14 @@ public class Jackson2ObjectMapperFactoryBean implements FactoryBean