public abstract class AbstractMessageConverter extends Object implements SmartMessageConverter
SmartMessageConverter
implementations including
support for common properties and a partial implementation of the conversion methods,
mainly to check if the converter supports the conversion based on the payload class
and MIME type.Modifier | Constructor and Description |
---|---|
protected |
AbstractMessageConverter(Collection<MimeType> supportedMimeTypes)
Constructor with a Collection of MIME types.
|
protected |
AbstractMessageConverter(MimeType... supportedMimeTypes)
Constructor with one or more MIME types via vararg.
|
protected |
AbstractMessageConverter(MimeType supportedMimeType)
Constructor with a single MIME type.
|
Modifier and Type | Method and Description |
---|---|
protected void |
addSupportedMimeTypes(MimeType... supportedMimeTypes)
Allows subclasses to add more supported mime types.
|
protected boolean |
canConvertFrom(Message<?> message,
Class<?> targetClass) |
protected boolean |
canConvertTo(Object payload,
MessageHeaders headers) |
protected Object |
convertFromInternal(Message<?> message,
Class<?> targetClass,
Object conversionHint)
Convert the message payload from serialized form to an Object.
|
protected Object |
convertToInternal(Object payload,
MessageHeaders headers,
Object conversionHint)
Convert the payload object to serialized form.
|
Object |
fromMessage(Message<?> message,
Class<?> targetClass)
Convert the payload of a
Message from a serialized form to a typed Object
of the specified target class. |
Object |
fromMessage(Message<?> message,
Class<?> targetClass,
Object conversionHint)
A variant of
MessageConverter.fromMessage(Message, Class) which takes an extra
conversion context as an argument, allowing to take e.g. |
ContentTypeResolver |
getContentTypeResolver()
Return the configured
ContentTypeResolver . |
protected MimeType |
getDefaultContentType(Object payload)
Return the default content type for the payload.
|
protected MimeType |
getMimeType(MessageHeaders headers) |
Class<?> |
getSerializedPayloadClass()
Return the configured preferred serialization payload class.
|
List<MimeType> |
getSupportedMimeTypes()
Return the supported MIME types.
|
boolean |
isStrictContentTypeMatch()
Whether content type resolution must produce a value that matches one of
the supported MIME types.
|
void |
setContentTypeResolver(ContentTypeResolver resolver)
Configure the
ContentTypeResolver to use to resolve the content
type of an input message. |
void |
setSerializedPayloadClass(Class<?> payloadClass)
Configure the preferred serialization class to use (byte[] or String) when
converting an Object payload to a
Message . |
void |
setStrictContentTypeMatch(boolean strictContentTypeMatch)
Whether this converter should convert messages for which no content type
could be resolved through the configured
ContentTypeResolver . |
protected abstract boolean |
supports(Class<?> clazz)
Whether the given class is supported by this converter.
|
protected boolean |
supportsMimeType(MessageHeaders headers) |
Message<?> |
toMessage(Object payload,
MessageHeaders headers)
Create a
Message whose payload is the result of converting the given
payload Object to serialized form. |
Message<?> |
toMessage(Object payload,
MessageHeaders headers,
Object conversionHint)
A variant of
MessageConverter.toMessage(Object, MessageHeaders) which takes an extra
conversion context as an argument, allowing to take e.g. |
protected final Log logger
protected AbstractMessageConverter(MimeType supportedMimeType)
supportedMimeType
- the supported MIME typeprotected AbstractMessageConverter(MimeType... supportedMimeTypes)
supportedMimeTypes
- the supported MIME typesprotected AbstractMessageConverter(Collection<MimeType> supportedMimeTypes)
supportedMimeTypes
- the supported MIME typespublic List<MimeType> getSupportedMimeTypes()
protected void addSupportedMimeTypes(MimeType... supportedMimeTypes)
public void setContentTypeResolver(@Nullable ContentTypeResolver resolver)
ContentTypeResolver
to use to resolve the content
type of an input message.
Note that if no resolver is configured, then
strictContentTypeMatch
should
be left as false
(the default) or otherwise this converter will
ignore all messages.
By default, a DefaultContentTypeResolver
instance is used.
@Nullable public ContentTypeResolver getContentTypeResolver()
ContentTypeResolver
.public void setStrictContentTypeMatch(boolean strictContentTypeMatch)
ContentTypeResolver
.
A converter can be configured to be strict only when a
contentTypeResolver
is configured and the
list of supportedMimeTypes
is not be empty.
When this flag is set to true
, supportsMimeType(MessageHeaders)
will return false
if the contentTypeResolver
is not defined or if no content-type header is present.
public boolean isStrictContentTypeMatch()
public void setSerializedPayloadClass(Class<?> payloadClass)
Message
.
The default value is byte[].
payloadClass
- either byte[] or Stringpublic Class<?> getSerializedPayloadClass()
@Nullable public final Object fromMessage(Message<?> message, Class<?> targetClass)
MessageConverter
Message
from a serialized form to a typed Object
of the specified target class. The MessageHeaders.CONTENT_TYPE
header
should indicate the MIME type to convert from.
If the converter does not support the specified media type or cannot perform
the conversion, it should return null
.
fromMessage
in interface MessageConverter
message
- the input messagetargetClass
- the target class for the conversionnull
if the converter cannot
perform the conversion@Nullable public final Object fromMessage(Message<?> message, Class<?> targetClass, @Nullable Object conversionHint)
SmartMessageConverter
MessageConverter.fromMessage(Message, Class)
which takes an extra
conversion context as an argument, allowing to take e.g. annotations
on a payload parameter into account.fromMessage
in interface SmartMessageConverter
message
- the input messagetargetClass
- the target class for the conversionconversionHint
- an extra object passed to the MessageConverter
,
e.g. the associated MethodParameter
(may be null
}null
if the converter cannot
perform the conversionMessageConverter.fromMessage(Message, Class)
@Nullable public final Message<?> toMessage(Object payload, @Nullable MessageHeaders headers)
MessageConverter
Message
whose payload is the result of converting the given
payload Object to serialized form. The optional MessageHeaders
parameter
may contain a MessageHeaders.CONTENT_TYPE
header to specify the target
media type for the conversion and it may contain additional headers to be added
to the message.
If the converter does not support the specified media type or cannot perform
the conversion, it should return null
.
toMessage
in interface MessageConverter
payload
- the Object to convertheaders
- optional headers for the message (may be null
)null
if the converter does not support the
Object type or the target media type@Nullable public final Message<?> toMessage(Object payload, @Nullable MessageHeaders headers, @Nullable Object conversionHint)
SmartMessageConverter
MessageConverter.toMessage(Object, MessageHeaders)
which takes an extra
conversion context as an argument, allowing to take e.g. annotations
on a return type into account.toMessage
in interface SmartMessageConverter
payload
- the Object to convertheaders
- optional headers for the message (may be null
)conversionHint
- an extra object passed to the MessageConverter
,
e.g. the associated MethodParameter
(may be null
}null
if the converter does not support the
Object type or the target media typeMessageConverter.toMessage(Object, MessageHeaders)
protected boolean canConvertTo(Object payload, @Nullable MessageHeaders headers)
protected boolean supportsMimeType(@Nullable MessageHeaders headers)
@Nullable protected MimeType getMimeType(@Nullable MessageHeaders headers)
@Nullable protected MimeType getDefaultContentType(Object payload)
toMessage(Object, MessageHeaders)
is invoked without
message headers or without a content type header.
By default, this returns the first element of the
supportedMimeTypes
, if any.
Can be overridden in subclasses.
payload
- the payload being converted to a messagenull
if not knownprotected abstract boolean supports(Class<?> clazz)
clazz
- the class to test for supporttrue
if supported; false
otherwise@Nullable protected Object convertFromInternal(Message<?> message, Class<?> targetClass, @Nullable Object conversionHint)
message
- the input messagetargetClass
- the target class for the conversionconversionHint
- an extra object passed to the MessageConverter
,
e.g. the associated MethodParameter
(may be null
}null
if the converter cannot
perform the conversion@Nullable protected Object convertToInternal(Object payload, @Nullable MessageHeaders headers, @Nullable Object conversionHint)
payload
- the Object to convertheaders
- optional headers for the message (may be null
)conversionHint
- an extra object passed to the MessageConverter
,
e.g. the associated MethodParameter
(may be null
}null
if the converter
cannot perform the conversion