GH-773 Fix wild card type matching in SmartCompositeMessageConverter

Resolves #773
This commit is contained in:
Oleg Zhurakousky
2021-11-29 17:10:49 +01:00
parent a60ed7c0cc
commit e8f7ae5387

View File

@@ -74,18 +74,21 @@ public class SmartCompositeMessageConverter extends CompositeMessageConverter {
if (headers.get(MessageHeaders.CONTENT_TYPE) == null) {
return null;
}
Object value = headers.get(MessageHeaders.CONTENT_TYPE).toString();
String[] contentTypes = StringUtils.delimitedListToStringArray((String) value, ",");
for (String contentType : contentTypes) {
if (!MimeType.valueOf(contentType).isConcrete()) {
List<MimeType> supportedMimeTypes = ((AbstractMessageConverter) converter).getSupportedMimeTypes();
for (MimeType supportedMimeType : supportedMimeTypes) {
MessageHeaderAccessor h = new MessageHeaderAccessor();
h.copyHeaders(headers);
h.setHeader(MessageHeaders.CONTENT_TYPE, supportedMimeType);
Message<?> result = converter.toMessage(payload, h.getMessageHeaders());
if (result != null) {
return result;
if (supportedMimeType.isCompatibleWith(MimeType.valueOf(contentType))) {
MessageHeaderAccessor h = new MessageHeaderAccessor();
h.copyHeaders(headers);
h.setHeader(MessageHeaders.CONTENT_TYPE, supportedMimeType);
Message<?> result = converter.toMessage(payload, h.getMessageHeaders());
if (result != null) {
return result;
}
}
}
}