From 12fe9174f0aeb88821ca5ad84d83e05e259fc56f Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Thu, 2 Jan 2014 11:27:18 -0500 Subject: [PATCH] Make ObjectMapper configurable in spring-messaging Issue: SPR-11279 --- .../MappingJackson2MessageConverter.java | 25 +++++++++++++++++++ .../MappingJackson2HttpMessageConverter.java | 12 +++++---- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/spring-messaging/src/main/java/org/springframework/messaging/converter/MappingJackson2MessageConverter.java b/spring-messaging/src/main/java/org/springframework/messaging/converter/MappingJackson2MessageConverter.java index a6dc6ad829..0051a156cb 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/converter/MappingJackson2MessageConverter.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/converter/MappingJackson2MessageConverter.java @@ -32,6 +32,7 @@ import com.fasterxml.jackson.databind.SerializationFeature; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; +import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.util.MimeType; @@ -61,6 +62,30 @@ public class MappingJackson2MessageConverter extends AbstractMessageConverter { } + /** + * Set the {@code ObjectMapper} for this converter. + * If not set, a default {@link ObjectMapper#ObjectMapper() ObjectMapper} is used. + *

Setting a custom-configured {@code ObjectMapper} is one way to take further + * control of the JSON serialization process. For example, an extended + * {@link com.fasterxml.jackson.databind.ser.SerializerFactory} can be + * configured that provides custom serializers for specific types. The other + * option for refining the serialization process is to use Jackson's provided + * annotations on the types to be serialized, in which case a custom-configured + * ObjectMapper is unnecessary. + */ + public void setObjectMapper(ObjectMapper objectMapper) { + Assert.notNull(objectMapper, "ObjectMapper must not be null"); + this.objectMapper = objectMapper; + configurePrettyPrint(); + } + + /** + * Return the underlying {@code ObjectMapper} for this converter. + */ + public ObjectMapper getObjectMapper() { + return this.objectMapper; + } + /** * Whether to use the {@link DefaultPrettyPrinter} when writing JSON. * This is a shortcut for setting up an {@code ObjectMapper} as follows: diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/MappingJackson2HttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/json/MappingJackson2HttpMessageConverter.java index 1fd6539842..3a6d4947ee 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/json/MappingJackson2HttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/json/MappingJackson2HttpMessageConverter.java @@ -85,11 +85,13 @@ public class MappingJackson2HttpMessageConverter extends AbstractHttpMessageConv /** * Set the {@code ObjectMapper} for this view. * If not set, a default {@link ObjectMapper#ObjectMapper() ObjectMapper} is used. - *

Setting a custom-configured {@code ObjectMapper} is one way to take further control of the JSON - * serialization process. For example, an extended {@link org.codehaus.jackson.map.SerializerFactory} - * can be configured that provides custom serializers for specific types. The other option for refining - * the serialization process is to use Jackson's provided annotations on the types to be serialized, - * in which case a custom-configured ObjectMapper is unnecessary. + *

Setting a custom-configured {@code ObjectMapper} is one way to take further + * control of the JSON serialization process. For example, an extended + * {@link com.fasterxml.jackson.databind.ser.SerializerFactory} + * can be configured that provides custom serializers for specific types. + * The other option for refining the serialization process is to use Jackson's + * provided annotations on the types to be serialized, in which case a + * custom-configured ObjectMapper is unnecessary. */ public void setObjectMapper(ObjectMapper objectMapper) { Assert.notNull(objectMapper, "ObjectMapper must not be null");