Class AbstractMessageConverter
- java.lang.Object
- org.springframework.messaging.converter.AbstractMessageConverter
- All Implemented Interfaces:
MessageConverter,SmartMessageConverter
- Direct Known Subclasses:
ByteArrayMessageConverter,MappingJackson2MessageConverter,MarshallingMessageConverter,ProtobufMessageConverter,StringMessageConverter
public abstract class AbstractMessageConverter extends Object implements SmartMessageConverter
Abstract base class forSmartMessageConverterimplementations 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.- Since:
- 4.0
- Author:
- Rossen Stoyanchev, Sebastien Deleuze, Juergen Hoeller
Constructor Summary
Constructors Modifier Constructor Description protectedAbstractMessageConverter(Collection<MimeType> supportedMimeTypes)Constructor with a Collection of MIME types.protectedAbstractMessageConverter(MimeType supportedMimeType)Constructor with a single MIME type.protectedAbstractMessageConverter(MimeType... supportedMimeTypes)Constructor with one or more MIME types via vararg.
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected voidaddSupportedMimeTypes(MimeType... supportedMimeTypes)Allows subclasses to add more supported mime types.protected booleancanConvertFrom(Message<?> message, Class<?> targetClass)protected booleancanConvertTo(Object payload, MessageHeaders headers)protected ObjectconvertFromInternal(Message<?> message, Class<?> targetClass, Object conversionHint)Convert the message payload from serialized form to an Object.protected ObjectconvertToInternal(Object payload, MessageHeaders headers, Object conversionHint)Convert the payload object to serialized form.ObjectfromMessage(Message<?> message, Class<?> targetClass)Convert the payload of aMessagefrom a serialized form to a typed Object of the specified target class.ObjectfromMessage(Message<?> message, Class<?> targetClass, Object conversionHint)A variant ofMessageConverter.fromMessage(Message, Class)which takes an extra conversion context as an argument, allowing to take e.g.ContentTypeResolvergetContentTypeResolver()Return the configuredContentTypeResolver.protected MimeTypegetDefaultContentType(Object payload)Return the default content type for the payload.protected MimeTypegetMimeType(MessageHeaders headers)Class<?>getSerializedPayloadClass()Return the configured preferred serialization payload class.List<MimeType>getSupportedMimeTypes()Return the supported MIME types.booleanisStrictContentTypeMatch()Whether content type resolution must produce a value that matches one of the supported MIME types.voidsetContentTypeResolver(ContentTypeResolver resolver)Configure theContentTypeResolverto use to resolve the content type of an input message.voidsetSerializedPayloadClass(Class<?> payloadClass)Configure the preferred serialization class to use (byte[] or String) when converting an Object payload to aMessage.voidsetStrictContentTypeMatch(boolean strictContentTypeMatch)Whether this converter should convert messages for which no content type could be resolved through the configuredContentTypeResolver.protected abstract booleansupports(Class<?> clazz)Whether the given class is supported by this converter.protected booleansupportsMimeType(MessageHeaders headers)Message<?>toMessage(Object payload, MessageHeaders headers)Create aMessagewhose payload is the result of converting the given payload Object to serialized form.Message<?>toMessage(Object payload, MessageHeaders headers, Object conversionHint)A variant ofMessageConverter.toMessage(Object, MessageHeaders)which takes an extra conversion context as an argument, allowing to take e.g.
Constructor Detail
AbstractMessageConverter
protected AbstractMessageConverter(MimeType supportedMimeType)
Constructor with a single MIME type.- Parameters:
supportedMimeType- the supported MIME type
AbstractMessageConverter
protected AbstractMessageConverter(MimeType... supportedMimeTypes)
Constructor with one or more MIME types via vararg.- Parameters:
supportedMimeTypes- the supported MIME types- Since:
- 5.2.2
AbstractMessageConverter
protected AbstractMessageConverter(Collection<MimeType> supportedMimeTypes)
Constructor with a Collection of MIME types.- Parameters:
supportedMimeTypes- the supported MIME types
Method Detail
getSupportedMimeTypes
public List<MimeType> getSupportedMimeTypes()
Return the supported MIME types.
addSupportedMimeTypes
protected void addSupportedMimeTypes(MimeType... supportedMimeTypes)
Allows subclasses to add more supported mime types.- Since:
- 5.2.2
setContentTypeResolver
public void setContentTypeResolver(@Nullable ContentTypeResolver resolver)
Configure theContentTypeResolverto use to resolve the content type of an input message.Note that if no resolver is configured, then
strictContentTypeMatchshould be left asfalse(the default) or otherwise this converter will ignore all messages.By default, a
DefaultContentTypeResolverinstance is used.
getContentTypeResolver
@Nullable public ContentTypeResolver getContentTypeResolver()
Return the configuredContentTypeResolver.
setStrictContentTypeMatch
public void setStrictContentTypeMatch(boolean strictContentTypeMatch)
Whether this converter should convert messages for which no content type could be resolved through the configuredContentTypeResolver.A converter can configured to be strict only when a
contentTypeResolveris configured and the list ofsupportedMimeTypesis not be empty.When this flag is set to
true,supportsMimeType(MessageHeaders)will returnfalseif thecontentTypeResolveris not defined or if no content-type header is present.
isStrictContentTypeMatch
public boolean isStrictContentTypeMatch()
Whether content type resolution must produce a value that matches one of the supported MIME types.
setSerializedPayloadClass
public void setSerializedPayloadClass(Class<?> payloadClass)
Configure the preferred serialization class to use (byte[] or String) when converting an Object payload to aMessage.The default value is byte[].
- Parameters:
payloadClass- either byte[] or String
getSerializedPayloadClass
public Class<?> getSerializedPayloadClass()
Return the configured preferred serialization payload class.
fromMessage
@Nullable public final Object fromMessage(Message<?> message, Class<?> targetClass)
Description copied from interface:MessageConverterConvert the payload of aMessagefrom a serialized form to a typed Object of the specified target class. TheMessageHeaders.CONTENT_TYPEheader 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.- Specified by:
fromMessagein interfaceMessageConverter- Parameters:
message- the input messagetargetClass- the target class for the conversion- Returns:
- the result of the conversion, or
nullif the converter cannot perform the conversion
fromMessage
@Nullable public final Object fromMessage(Message<?> message, Class<?> targetClass, @Nullable Object conversionHint)
Description copied from interface:SmartMessageConverterA variant ofMessageConverter.fromMessage(Message, Class)which takes an extra conversion context as an argument, allowing to take e.g. annotations on a payload parameter into account.- Specified by:
fromMessagein interfaceSmartMessageConverter- Parameters:
message- the input messagetargetClass- the target class for the conversionconversionHint- an extra object passed to theMessageConverter, e.g. the associatedMethodParameter(may benull}- Returns:
- the result of the conversion, or
nullif the converter cannot perform the conversion - See Also:
MessageConverter.fromMessage(Message, Class)
toMessage
@Nullable public final Message<?> toMessage(Object payload, @Nullable MessageHeaders headers)
Description copied from interface:MessageConverterCreate aMessagewhose payload is the result of converting the given payload Object to serialized form. The optionalMessageHeadersparameter may contain aMessageHeaders.CONTENT_TYPEheader 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.- Specified by:
toMessagein interfaceMessageConverter- Parameters:
payload- the Object to convertheaders- optional headers for the message (may benull)- Returns:
- the new message, or
nullif the converter does not support the Object type or the target media type
toMessage
@Nullable public final Message<?> toMessage(Object payload, @Nullable MessageHeaders headers, @Nullable Object conversionHint)
Description copied from interface:SmartMessageConverterA variant ofMessageConverter.toMessage(Object, MessageHeaders)which takes an extra conversion context as an argument, allowing to take e.g. annotations on a return type into account.- Specified by:
toMessagein interfaceSmartMessageConverter- Parameters:
payload- the Object to convertheaders- optional headers for the message (may benull)conversionHint- an extra object passed to theMessageConverter, e.g. the associatedMethodParameter(may benull}- Returns:
- the new message, or
nullif the converter does not support the Object type or the target media type - See Also:
MessageConverter.toMessage(Object, MessageHeaders)
canConvertFrom
protected boolean canConvertFrom(Message<?> message, Class<?> targetClass)
canConvertTo
protected boolean canConvertTo(Object payload, @Nullable MessageHeaders headers)
supportsMimeType
protected boolean supportsMimeType(@Nullable MessageHeaders headers)
getMimeType
@Nullable protected MimeType getMimeType(@Nullable MessageHeaders headers)
getDefaultContentType
@Nullable protected MimeType getDefaultContentType(Object payload)
Return the default content type for the payload. Called whentoMessage(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.- Parameters:
payload- the payload being converted to a message- Returns:
- the content type, or
nullif not known
supports
protected abstract boolean supports(Class<?> clazz)
Whether the given class is supported by this converter.- Parameters:
clazz- the class to test for support- Returns:
trueif supported;falseotherwise
convertFromInternal
@Nullable protected Object convertFromInternal(Message<?> message, Class<?> targetClass, @Nullable Object conversionHint)
Convert the message payload from serialized form to an Object.- Parameters:
message- the input messagetargetClass- the target class for the conversionconversionHint- an extra object passed to theMessageConverter, e.g. the associatedMethodParameter(may benull}- Returns:
- the result of the conversion, or
nullif the converter cannot perform the conversion - Since:
- 4.2
convertToInternal
@Nullable protected Object convertToInternal(Object payload, @Nullable MessageHeaders headers, @Nullable Object conversionHint)
Convert the payload object to serialized form.- Parameters:
payload- the Object to convertheaders- optional headers for the message (may benull)conversionHint- an extra object passed to theMessageConverter, e.g. the associatedMethodParameter(may benull}- Returns:
- the resulting payload for the message, or
nullif the converter cannot perform the conversion - Since:
- 4.2