public abstract class AbstractJackson2HttpMessageConverter extends AbstractGenericHttpMessageConverter<Object>
HttpMessageConverter implementations.
Compatible with Jackson 2.9 to 2.12, as of Spring 5.3.
MappingJackson2HttpMessageConverter| Modifier and Type | Field and Description |
|---|---|
static Charset |
DEFAULT_CHARSET
Deprecated.
|
protected ObjectMapper |
defaultObjectMapper |
logger| Modifier | Constructor and Description |
|---|---|
protected |
AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper) |
protected |
AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper,
MediaType... supportedMediaTypes) |
protected |
AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper,
MediaType supportedMediaType) |
| Modifier and Type | Method and Description |
|---|---|
boolean |
canRead(Class<?> clazz,
MediaType mediaType)
This implementation checks if the given class is supported,
and if the supported media types
include the given media type.
|
boolean |
canRead(Type type,
Class<?> contextClass,
MediaType mediaType)
Indicates whether the given type can be read by this converter.
|
boolean |
canWrite(Class<?> clazz,
MediaType mediaType)
|
protected Charset |
getCharset(MediaType contentType)
Determine the charset to use for JSON input.
|
protected Long |
getContentLength(Object object,
MediaType contentType)
Returns the content length for the given type.
|
protected MediaType |
getDefaultContentType(Object object)
Returns the default content type for the given type.
|
protected JavaType |
getJavaType(Type type,
Class<?> contextClass)
Return the Jackson
JavaType for the specified type and context class. |
protected JsonEncoding |
getJsonEncoding(MediaType contentType)
Determine the JSON encoding to use for the given content type.
|
ObjectMapper |
getObjectMapper()
Return the main
ObjectMapper in use. |
Map<MediaType,ObjectMapper> |
getObjectMappersForType(Class<?> clazz)
Return ObjectMapper registrations for the given class, if any.
|
List<MediaType> |
getSupportedMediaTypes(Class<?> clazz)
Return the list of media types supported by this converter for the given
class.
|
protected void |
logWarningIfNecessary(Type type,
Throwable cause)
Determine whether to log the given exception coming from a
ObjectMapper.canDeserialize(com.fasterxml.jackson.databind.JavaType) / ObjectMapper.canSerialize(java.lang.Class<?>) check. |
Object |
read(Type type,
Class<?> contextClass,
HttpInputMessage inputMessage)
Read an object of the given type form the given input message, and returns it.
|
protected Object |
readInternal(Class<?> clazz,
HttpInputMessage inputMessage)
Abstract template method that reads the actual object.
|
void |
registerObjectMappersForType(Class<?> clazz,
Consumer<Map<MediaType,ObjectMapper>> registrar)
Configure the
ObjectMapper instances to use for the given
Class. |
void |
setObjectMapper(ObjectMapper objectMapper)
Configure the main
ObjectMapper to use for Object conversion. |
void |
setPrettyPrint(boolean prettyPrint)
Whether to use the
DefaultPrettyPrinter when writing JSON. |
protected void |
writeInternal(Object object,
Type type,
HttpOutputMessage outputMessage)
Abstract template method that writes the actual body.
|
protected void |
writePrefix(JsonGenerator generator,
Object object)
Write a prefix before the main content.
|
protected void |
writeSuffix(JsonGenerator generator,
Object object)
Write a suffix after the main content.
|
canWrite, supports, write, writeInternaladdDefaultHeaders, canRead, canWrite, getDefaultCharset, getSupportedMediaTypes, read, setDefaultCharset, setSupportedMediaTypes, writeclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitgetSupportedMediaTypes, read, write@Nullable @Deprecated public static final Charset DEFAULT_CHARSET
protected ObjectMapper defaultObjectMapper
protected AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper)
protected AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper, MediaType supportedMediaType)
protected AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper, MediaType... supportedMediaTypes)
public void setObjectMapper(ObjectMapper objectMapper)
ObjectMapper to use for Object conversion.
If not set, a default ObjectMapper instance is created.
Setting a custom-configured ObjectMapper is one way to take
further control of the JSON serialization process. For example, an extended
SerializerFactory
can be configured that provides custom serializers for specific types.
Another option for refining the serialization process is to use Jackson's
provided annotations on the types to be serialized, in which case a
custom-configured ObjectMapper is unnecessary.
public ObjectMapper getObjectMapper()
ObjectMapper in use.public void registerObjectMappersForType(Class<?> clazz, Consumer<Map<MediaType,ObjectMapper>> registrar)
ObjectMapper instances to use for the given
Class. This is useful when you want to deviate from the
default ObjectMapper or have the
ObjectMapper vary by MediaType.
Note: Use of this method effectively turns off use of
the default ObjectMapper and
supportedMediaTypes for the given
class. Therefore it is important for the mappings configured here to
include every MediaType that must
be supported for the given class.
clazz - the type of Object to register ObjectMapper instances forregistrar - a consumer to populate or otherwise update the
MediaType-to-ObjectMapper associations for the given Class@Nullable public Map<MediaType,ObjectMapper> getObjectMappersForType(Class<?> clazz)
clazz - the class to look up for registrations forpublic List<MediaType> getSupportedMediaTypes(Class<?> clazz)
HttpMessageConverterHttpMessageConverter.getSupportedMediaTypes() if the
converter does not support the given Class or if it supports it only for
a subset of media types.clazz - the type of class to checkpublic void setPrettyPrint(boolean prettyPrint)
DefaultPrettyPrinter when writing JSON.
This is a shortcut for setting up an ObjectMapper as follows:
ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationFeature.INDENT_OUTPUT, true); converter.setObjectMapper(mapper);
public boolean canRead(Class<?> clazz, @Nullable MediaType mediaType)
AbstractHttpMessageConvertercanRead in interface HttpMessageConverter<Object>canRead in class AbstractHttpMessageConverter<Object>clazz - the class to test for readabilitymediaType - the media type to read (can be null if not specified);
typically the value of a Content-Type header.true if readable; false otherwisepublic boolean canRead(Type type, @Nullable Class<?> contextClass, @Nullable MediaType mediaType)
GenericHttpMessageConverterHttpMessageConverter.canRead(Class, MediaType) with additional ones
related to the generic type.canRead in interface GenericHttpMessageConverter<Object>canRead in class AbstractGenericHttpMessageConverter<Object>type - the (potentially generic) type to test for readabilitycontextClass - a context class for the target type, for example a class
in which the target type appears in a method signature (can be null)mediaType - the media type to read, can be null if not specified.
Typically the value of a Content-Type header.true if readable; false otherwisepublic boolean canWrite(Class<?> clazz, @Nullable MediaType mediaType)
AbstractHttpMessageConvertercanWrite in interface HttpMessageConverter<Object>canWrite in class AbstractHttpMessageConverter<Object>clazz - the class to test for writabilitymediaType - the media type to write (can be null if not specified);
typically the value of an Accept header.true if writable; false otherwiseprotected void logWarningIfNecessary(Type type, @Nullable Throwable cause)
ObjectMapper.canDeserialize(com.fasterxml.jackson.databind.JavaType) / ObjectMapper.canSerialize(java.lang.Class<?>) check.type - the class that Jackson tested for (de-)serializabilitycause - the Jackson-thrown exception to evaluate
(typically a JsonMappingException)public Object read(Type type, @Nullable Class<?> contextClass, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException
GenericHttpMessageConvertertype - the (potentially generic) type of object to return. This type must have
previously been passed to the canRead method of this interface,
which must have returned true.contextClass - a context class for the target type, for example a class
in which the target type appears in a method signature (can be null)inputMessage - the HTTP input message to read fromIOException - in case of I/O errorsHttpMessageNotReadableException - in case of conversion errorsprotected Object readInternal(Class<?> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException
AbstractHttpMessageConverterAbstractHttpMessageConverter.read(java.lang.Class<? extends T>, org.springframework.http.HttpInputMessage).readInternal in class AbstractHttpMessageConverter<Object>clazz - the type of object to returninputMessage - the HTTP input message to read fromIOException - in case of I/O errorsHttpMessageNotReadableException - in case of conversion errorsprotected Charset getCharset(@Nullable MediaType contentType)
By default this is either the charset from the input MediaType
or otherwise falling back on UTF-8. Can be overridden in subclasses.
contentType - the content type of the HTTP input messageprotected void writeInternal(Object object, @Nullable Type type, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException
AbstractGenericHttpMessageConverterAbstractGenericHttpMessageConverter.write(T, java.lang.reflect.Type, org.springframework.http.MediaType, org.springframework.http.HttpOutputMessage).writeInternal in class AbstractGenericHttpMessageConverter<Object>object - the object to write to the output messagetype - the type of object to write (may be null)outputMessage - the HTTP output message to write toIOException - in case of I/O errorsHttpMessageNotWritableException - in case of conversion errorsprotected void writePrefix(JsonGenerator generator, Object object) throws IOException
generator - the generator to use for writing content.object - the object to write to the output message.IOExceptionprotected void writeSuffix(JsonGenerator generator, Object object) throws IOException
generator - the generator to use for writing content.object - the object to write to the output message.IOExceptionprotected JavaType getJavaType(Type type, @Nullable Class<?> contextClass)
JavaType for the specified type and context class.type - the generic type to return the Jackson JavaType forcontextClass - a context class for the target type, for example a class
in which the target type appears in a method signature (can be null)protected JsonEncoding getJsonEncoding(@Nullable MediaType contentType)
contentType - the media type as requested by the callernull)@Nullable protected MediaType getDefaultContentType(Object object) throws IOException
AbstractHttpMessageConverterAbstractHttpMessageConverter.write(T, org.springframework.http.MediaType, org.springframework.http.HttpOutputMessage)
is invoked without a specified content type parameter.
By default, this returns the first element of the
supportedMediaTypes property, if any.
Can be overridden in subclasses.
getDefaultContentType in class AbstractHttpMessageConverter<Object>object - the type to return the content type fornull if not knownIOExceptionprotected Long getContentLength(Object object, @Nullable MediaType contentType) throws IOException
AbstractHttpMessageConverterBy default, this returns null, meaning that the content length is unknown.
Can be overridden in subclasses.
getContentLength in class AbstractHttpMessageConverter<Object>object - the type to return the content length fornull if not knownIOException