From aa1360b1546916c8f4c5570093e98077c9d6dd1b Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Fri, 15 Sep 2023 17:45:13 +0200 Subject: [PATCH] Complete set of constructors with consistent javadoc Closes gh-31234 --- .../MappingJackson2MessageConverter.java | 12 ++++- .../MappingJackson2MessageConverter.java | 47 ++++++++++++------- 2 files changed, 41 insertions(+), 18 deletions(-) diff --git a/spring-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java b/spring-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java index 2e1e955d12b..5d1cf866e26 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java @@ -89,6 +89,9 @@ public class MappingJackson2MessageConverter implements SmartMessageConverter, B private ClassLoader beanClassLoader; + /** + * Construct a {@code MappingJackson2MessageConverter} with a default {@link ObjectMapper}. + */ @SuppressWarnings("deprecation") // on Jackson 2.13: configure(MapperFeature, boolean) public MappingJackson2MessageConverter() { this.objectMapper = new ObjectMapper(); @@ -96,13 +99,20 @@ public class MappingJackson2MessageConverter implements SmartMessageConverter, B this.objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); } + /** + * Construct a {@code MappingJackson2MessageConverter} with a custom {@link ObjectMapper}. + * @param objectMapper the ObjectMapper to use + * @since 6.1 + */ public MappingJackson2MessageConverter(ObjectMapper objectMapper) { Assert.notNull(objectMapper, "ObjectMapper must not be null"); this.objectMapper = objectMapper; } + /** - * Specify the {@link ObjectMapper} to use instead of using the default. + * Set the {@code ObjectMapper} for this converter. + * If not set, a default {@link ObjectMapper#ObjectMapper() ObjectMapper} is used. */ public void setObjectMapper(ObjectMapper objectMapper) { Assert.notNull(objectMapper, "ObjectMapper must not be null"); 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 f9c4216b8d5..bdc0cd09f83 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 @@ -59,6 +59,9 @@ import org.springframework.util.MimeType; */ public class MappingJackson2MessageConverter extends AbstractMessageConverter { + private static final MimeType[] DEFAULT_MIME_TYPES = new MimeType[] { + new MimeType("application", "json"), new MimeType("application", "*+json")}; + private ObjectMapper objectMapper; @Nullable @@ -66,41 +69,51 @@ public class MappingJackson2MessageConverter extends AbstractMessageConverter { /** - * Construct a {@code MappingJackson2MessageConverter} supporting - * the {@code application/json} MIME type with {@code UTF-8} character set. + * Construct a {@code MappingJackson2MessageConverter} with a default {@link ObjectMapper}, + * supporting the {@code application/json} MIME type with {@code UTF-8} character set. */ public MappingJackson2MessageConverter() { - super(new MimeType("application", "json"), new MimeType("application", "*+json")); - this.objectMapper = initObjectMapper(); + this(DEFAULT_MIME_TYPES); } /** - * Construct a {@code MappingJackson2MessageConverter} supporting - * one or more custom MIME types. + * Construct a {@code MappingJackson2MessageConverter} with a default {@link ObjectMapper}, + * supporting one or more custom MIME types. * @param supportedMimeTypes the supported MIME types * @since 4.1.5 */ + @SuppressWarnings("deprecation") // on Jackson 2.13: configure(MapperFeature, boolean) public MappingJackson2MessageConverter(MimeType... supportedMimeTypes) { super(supportedMimeTypes); - this.objectMapper = initObjectMapper(); + this.objectMapper = new ObjectMapper(); + this.objectMapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false); + this.objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); } + /** + * Construct a {@code MappingJackson2MessageConverter} with a custom {@link ObjectMapper}, + * supporting the {@code application/json} MIME type with {@code UTF-8} character set. + * @param objectMapper the ObjectMapper to use + * @since 6.1 + */ public MappingJackson2MessageConverter(ObjectMapper objectMapper) { - super(new MimeType("application", "json"), new MimeType("application", "*+json")); + this(objectMapper, DEFAULT_MIME_TYPES); + } + + /** + * Construct a {@code MappingJackson2MessageConverter} with a custom {@link ObjectMapper}, + * supporting one or more custom MIME types. + * @param objectMapper the ObjectMapper to use + * @param supportedMimeTypes the supported MIME types + * @since 6.1 + */ + public MappingJackson2MessageConverter(ObjectMapper objectMapper, MimeType... supportedMimeTypes) { + super(supportedMimeTypes); Assert.notNull(objectMapper, "ObjectMapper must not be null"); this.objectMapper = objectMapper; } - - @SuppressWarnings("deprecation") // on Jackson 2.13: configure(MapperFeature, boolean) - private ObjectMapper initObjectMapper() { - ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false); - objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - return objectMapper; - } - /** * Set the {@code ObjectMapper} for this converter. * If not set, a default {@link ObjectMapper#ObjectMapper() ObjectMapper} is used.