GH-557 Add special handling for wild-card content type and subtype
Add special handling for wild-card content type and subtype to NegotiatingMessageConverterWrapper Add author tags Resolves #557
This commit is contained in:
@@ -35,6 +35,9 @@ import org.springframework.util.MimeType;
|
|||||||
* negotiation when <em>producing</em> messages. To that effect, messages should contain an "accept" header, that may
|
* negotiation when <em>producing</em> messages. To that effect, messages should contain an "accept" header, that may
|
||||||
* contain a wildcard type (such as {@code text/*}, which may be tested against every
|
* contain a wildcard type (such as {@code text/*}, which may be tested against every
|
||||||
* {@link AbstractMessageConverter#getSupportedMimeTypes() supported mime type} of the delegate MessageConverter.
|
* {@link AbstractMessageConverter#getSupportedMimeTypes() supported mime type} of the delegate MessageConverter.
|
||||||
|
*
|
||||||
|
* @author Eric Bottard
|
||||||
|
* @author Oleg Zhurakousky
|
||||||
*/
|
*/
|
||||||
public final class NegotiatingMessageConverterWrapper implements SmartMessageConverter {
|
public final class NegotiatingMessageConverterWrapper implements SmartMessageConverter {
|
||||||
|
|
||||||
@@ -118,22 +121,24 @@ public final class NegotiatingMessageConverterWrapper implements SmartMessageCon
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (accepted != null) {
|
if (accepted != null) {
|
||||||
|
Message<?> result = null;
|
||||||
for (MimeType supportedConcreteType : delegate.getSupportedMimeTypes()) {
|
for (MimeType supportedConcreteType : delegate.getSupportedMimeTypes()) {
|
||||||
if (accepted.includes(supportedConcreteType)) {
|
if (supportedConcreteType.isWildcardType() || supportedConcreteType.isWildcardSubtype()) {
|
||||||
|
result = delegate.toMessage(payload, accessor.toMessageHeaders(), conversionHint);
|
||||||
|
}
|
||||||
|
if (result == null && accepted.includes(supportedConcreteType)) {
|
||||||
// Note the use of setHeader() which will set the value even if already present.
|
// Note the use of setHeader() which will set the value even if already present.
|
||||||
accessor.setHeader(MessageHeaders.CONTENT_TYPE, supportedConcreteType);
|
accessor.setHeader(MessageHeaders.CONTENT_TYPE, supportedConcreteType);
|
||||||
Message<?> result = delegate.toMessage(payload, accessor.toMessageHeaders(), conversionHint);
|
result = delegate.toMessage(payload, accessor.toMessageHeaders(), conversionHint);
|
||||||
if (result != null) {
|
}
|
||||||
return result;
|
if (result != null) {
|
||||||
}
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Message<?> toMessage(Object payload, MessageHeaders headers) {
|
public Message<?> toMessage(Object payload, MessageHeaders headers) {
|
||||||
return toMessage(payload, headers, null);
|
return toMessage(payload, headers, null);
|
||||||
|
|||||||
Reference in New Issue
Block a user