public abstract class AbstractJackson2HttpMessageConverter extends AbstractGenericHttpMessageConverter<java.lang.Object>
HttpMessageConverter
implementations.
Compatible with Jackson 2.6 and higher, as of Spring 4.3.
Modifier and Type | Field and Description |
---|---|
static java.nio.charset.Charset |
DEFAULT_CHARSET |
protected ObjectMapper |
objectMapper |
private java.lang.Boolean |
prettyPrint |
private PrettyPrinter |
ssePrettyPrinter |
private static MediaType |
TEXT_EVENT_STREAM |
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(java.lang.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(java.lang.reflect.Type type,
java.lang.Class<?> contextClass,
MediaType mediaType)
Indicates whether the given type can be read by this converter.
|
boolean |
canWrite(java.lang.Class<?> clazz,
MediaType mediaType)
|
private void |
configurePrettyPrint() |
protected java.lang.Long |
getContentLength(java.lang.Object object,
MediaType contentType)
Returns the content length for the given type.
|
protected MediaType |
getDefaultContentType(java.lang.Object object)
Returns the default content type for the given type.
|
protected JavaType |
getJavaType(java.lang.reflect.Type type,
java.lang.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 underlying
ObjectMapper for this view. |
protected void |
init(ObjectMapper objectMapper) |
protected void |
logWarningIfNecessary(java.lang.reflect.Type type,
java.lang.Throwable cause)
Determine whether to log the given exception coming from a
ObjectMapper#canDeserialize / ObjectMapper#canSerialize check. |
java.lang.Object |
read(java.lang.reflect.Type type,
java.lang.Class<?> contextClass,
HttpInputMessage inputMessage)
Read an object of the given type form the given input message, and returns it.
|
protected java.lang.Object |
readInternal(java.lang.Class<?> clazz,
HttpInputMessage inputMessage)
Abstract template method that reads the actual object.
|
private java.lang.Object |
readJavaType(JavaType javaType,
HttpInputMessage inputMessage) |
private ResolvableType |
resolveVariable(java.lang.reflect.TypeVariable<?> typeVariable,
ResolvableType contextType) |
void |
setObjectMapper(ObjectMapper objectMapper)
Set the
ObjectMapper for this view. |
void |
setPrettyPrint(boolean prettyPrint)
Whether to use the
DefaultPrettyPrinter when writing JSON. |
protected void |
writeInternal(java.lang.Object object,
java.lang.reflect.Type type,
HttpOutputMessage outputMessage)
Abstract template method that writes the actual body.
|
protected void |
writePrefix(JsonGenerator generator,
java.lang.Object object)
Write a prefix before the main content.
|
protected void |
writeSuffix(JsonGenerator generator,
java.lang.Object object)
Write a suffix after the main content.
|
canWrite, supports, write, writeInternal
addDefaultHeaders, canRead, canWrite, getDefaultCharset, getSupportedMediaTypes, read, setDefaultCharset, setSupportedMediaTypes, write
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getSupportedMediaTypes, read, write
public static final java.nio.charset.Charset DEFAULT_CHARSET
private static final MediaType TEXT_EVENT_STREAM
protected ObjectMapper objectMapper
private java.lang.Boolean prettyPrint
private PrettyPrinter ssePrettyPrinter
protected AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper)
protected AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper, MediaType supportedMediaType)
protected AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper, MediaType... supportedMediaTypes)
protected void init(ObjectMapper objectMapper)
public void setObjectMapper(ObjectMapper objectMapper)
ObjectMapper
for this view.
If not set, a default ObjectMapper
is used.
Setting a custom-configured ObjectMapper
is one way to take further
control of the JSON serialization process. For example, an extended
com.fasterxml.jackson.databind.ser.SerializerFactory
can be configured that provides custom serializers for specific types.
The other 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
for this view.public 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);
private void configurePrettyPrint()
public boolean canRead(java.lang.Class<?> clazz, MediaType mediaType)
AbstractHttpMessageConverter
canRead
in interface HttpMessageConverter<java.lang.Object>
canRead
in class AbstractHttpMessageConverter<java.lang.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(java.lang.reflect.Type type, java.lang.Class<?> contextClass, MediaType mediaType)
GenericHttpMessageConverter
HttpMessageConverter.canRead(Class, MediaType)
with additional ones
related to the generic type.canRead
in interface GenericHttpMessageConverter<java.lang.Object>
canRead
in class AbstractGenericHttpMessageConverter<java.lang.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(java.lang.Class<?> clazz, MediaType mediaType)
AbstractHttpMessageConverter
canWrite
in interface HttpMessageConverter<java.lang.Object>
canWrite
in class AbstractHttpMessageConverter<java.lang.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(java.lang.reflect.Type type, java.lang.Throwable cause)
ObjectMapper#canDeserialize
/ ObjectMapper#canSerialize
check.type
- the class that Jackson tested for (de-)serializabilitycause
- the Jackson-thrown exception to evaluate
(typically a JsonMappingException
)protected java.lang.Object readInternal(java.lang.Class<?> clazz, HttpInputMessage inputMessage) throws java.io.IOException, HttpMessageNotReadableException
AbstractHttpMessageConverter
AbstractHttpMessageConverter.read(java.lang.Class<? extends T>, org.springframework.http.HttpInputMessage)
.readInternal
in class AbstractHttpMessageConverter<java.lang.Object>
clazz
- the type of object to returninputMessage
- the HTTP input message to read fromjava.io.IOException
- in case of I/O errorsHttpMessageNotReadableException
- in case of conversion errorspublic java.lang.Object read(java.lang.reflect.Type type, java.lang.Class<?> contextClass, HttpInputMessage inputMessage) throws java.io.IOException, HttpMessageNotReadableException
GenericHttpMessageConverter
type
- 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 fromjava.io.IOException
- in case of I/O errorsHttpMessageNotReadableException
- in case of conversion errorsprivate java.lang.Object readJavaType(JavaType javaType, HttpInputMessage inputMessage)
protected void writeInternal(java.lang.Object object, java.lang.reflect.Type type, HttpOutputMessage outputMessage) throws java.io.IOException, HttpMessageNotWritableException
AbstractGenericHttpMessageConverter
AbstractGenericHttpMessageConverter.write(T, java.lang.reflect.Type, org.springframework.http.MediaType, org.springframework.http.HttpOutputMessage)
.writeInternal
in class AbstractGenericHttpMessageConverter<java.lang.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 tojava.io.IOException
- in case of I/O errorsHttpMessageNotWritableException
- in case of conversion errorsprotected void writePrefix(JsonGenerator generator, java.lang.Object object) throws java.io.IOException
generator
- the generator to use for writing content.object
- the object to write to the output message.java.io.IOException
protected void writeSuffix(JsonGenerator generator, java.lang.Object object) throws java.io.IOException
generator
- the generator to use for writing content.object
- the object to write to the output message.java.io.IOException
protected JavaType getJavaType(java.lang.reflect.Type type, java.lang.Class<?> contextClass)
JavaType
for the specified type and context class.
The default implementation returns typeFactory.constructType(type, contextClass)
,
but this can be overridden in subclasses, to allow for custom generic collection handling.
For instance:
protected JavaType getJavaType(Type type) { if (type instanceof Class && List.class.isAssignableFrom((Class)type)) { return TypeFactory.collectionType(ArrayList.class, MyBean.class); } else { return super.getJavaType(type); } }
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
)private ResolvableType resolveVariable(java.lang.reflect.TypeVariable<?> typeVariable, ResolvableType contextType)
protected JsonEncoding getJsonEncoding(MediaType contentType)
contentType
- the media type as requested by the callernull
)protected MediaType getDefaultContentType(java.lang.Object object) throws java.io.IOException
AbstractHttpMessageConverter
AbstractHttpMessageConverter.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<java.lang.Object>
object
- the type to return the content type fornull
if not knownjava.io.IOException
protected java.lang.Long getContentLength(java.lang.Object object, MediaType contentType) throws java.io.IOException
AbstractHttpMessageConverter
By default, this returns null
, meaning that the content length is unknown.
Can be overridden in subclasses.
getContentLength
in class AbstractHttpMessageConverter<java.lang.Object>
object
- the type to return the content length fornull
if not knownjava.io.IOException