From 8396c071af928b5b7e9f74525b5c1e474137eda6 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Tue, 10 Feb 2026 09:58:25 +0100 Subject: [PATCH] Fix wildcard MIME type support in messaging converters Prior to this commit, the "application/*+json" wildcard MIME type was added to the list of supported MIME types in the JSON messaging converter. This change wasn't fully reflected in the `AbstractMessageConverter`, because only strict matching of type and subtybe were considered. This commit updates the `AbstractMessageConverter` to not only check the type and subtype, but also check whether the supported MIME type includes the one given as a parameter. Fixes gh-36285 --- .../converter/AbstractMessageConverter.java | 2 +- .../MappingJackson2MessageConverterTests.java | 20 +++++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/spring-messaging/src/main/java/org/springframework/messaging/converter/AbstractMessageConverter.java b/spring-messaging/src/main/java/org/springframework/messaging/converter/AbstractMessageConverter.java index 381a9326528..f372ab45638 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/converter/AbstractMessageConverter.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/converter/AbstractMessageConverter.java @@ -242,7 +242,7 @@ public abstract class AbstractMessageConverter implements SmartMessageConverter return !isStrictContentTypeMatch(); } for (MimeType current : getSupportedMimeTypes()) { - if (current.getType().equals(mimeType.getType()) && current.getSubtype().equals(mimeType.getSubtype())) { + if (current.includes(mimeType)) { return true; } } diff --git a/spring-messaging/src/test/java/org/springframework/messaging/converter/MappingJackson2MessageConverterTests.java b/spring-messaging/src/test/java/org/springframework/messaging/converter/MappingJackson2MessageConverterTests.java index 85c6bbba659..e3168f49f93 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/converter/MappingJackson2MessageConverterTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/converter/MappingJackson2MessageConverterTests.java @@ -54,7 +54,7 @@ class MappingJackson2MessageConverterTests { } @Test // SPR-12724 - public void mimetypeParametrizedConstructor() { + void mimetypeParametrizedConstructor() { MimeType mimetype = new MimeType("application", "xml", StandardCharsets.UTF_8); MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(mimetype); assertThat(converter.getSupportedMimeTypes()).contains(mimetype); @@ -63,7 +63,7 @@ class MappingJackson2MessageConverterTests { } @Test // SPR-12724 - public void mimetypesParametrizedConstructor() { + void mimetypesParametrizedConstructor() { MimeType jsonMimetype = new MimeType("application", "json", StandardCharsets.UTF_8); MimeType xmlMimetype = new MimeType("application", "xml", StandardCharsets.UTF_8); MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(jsonMimetype, xmlMimetype); @@ -72,6 +72,22 @@ class MappingJackson2MessageConverterTests { .isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)).isFalse(); } + @Test + void supportJsonMimeType() { + MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); + Message message = MessageBuilder.withPayload("foo") + .setHeader(MessageHeaders.CONTENT_TYPE, "application/json").build(); + assertThat(converter.supportsMimeType(message.getHeaders())).isTrue(); + } + + @Test + void supportVendorJsonMimeTypes() { + MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); + Message message = MessageBuilder.withPayload("foo") + .setHeader(MessageHeaders.CONTENT_TYPE, "application/vnd.springframework.type+json").build(); + assertThat(converter.supportsMimeType(message.getHeaders())).isTrue(); + } + @Test void fromMessage() { MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();