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 typeResolverBuilder) { + this.builder.defaultTyping(typeResolverBuilder); + } + /** * Set a custom inclusion strategy for serialization. * @see com.fasterxml.jackson.annotation.JsonInclude.Include @@ -223,6 +232,27 @@ public class Jackson2ObjectMapperFactoryBean implements FactoryBean, Class> mixIns) { + this.builder.mixIns(mixIns); + } + /** * Configure custom serializers. Each serializer is registered for the type * returned by {@link JsonSerializer#handledType()}, which must not be @@ -248,18 +278,6 @@ public class Jackson2ObjectMapperFactoryBean implements FactoryBean, Class> mixIns) { - this.builder.mixIns(mixIns); - } - /** * Shortcut for {@link MapperFeature#AUTO_DETECT_FIELDS} option. */ @@ -373,6 +391,11 @@ public class Jackson2ObjectMapperFactoryBean implements FactoryBean