Class AbstractJackson2HttpMessageConverter
- java.lang.Object
- org.springframework.http.converter.AbstractHttpMessageConverter<T>
- org.springframework.http.converter.AbstractGenericHttpMessageConverter<Object>
- org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter
- All Implemented Interfaces:
GenericHttpMessageConverter<Object>,HttpMessageConverter<Object>
- Direct Known Subclasses:
MappingJackson2HttpMessageConverter,MappingJackson2XmlHttpMessageConverter
public abstract class AbstractJackson2HttpMessageConverter extends AbstractGenericHttpMessageConverter<Object>
Abstract base class for Jackson based and content type independentHttpMessageConverterimplementations.Compatible with Jackson 2.6 and higher, as of Spring 4.3.
- Since:
- 4.1
- Author:
- Arjen Poutsma, Keith Donald, Rossen Stoyanchev, Juergen Hoeller, Sebastien Deleuze
- See Also:
MappingJackson2HttpMessageConverter
Field Summary
Fields Modifier and Type Field Description static CharsetDEFAULT_CHARSETprotected ObjectMapperobjectMapperFields inherited from class org.springframework.http.converter.AbstractHttpMessageConverter
logger
Constructor Summary
Constructors Modifier Constructor Description protectedAbstractJackson2HttpMessageConverter(ObjectMapper objectMapper)protectedAbstractJackson2HttpMessageConverter(ObjectMapper objectMapper, MediaType supportedMediaType)protectedAbstractJackson2HttpMessageConverter(ObjectMapper objectMapper, MediaType... supportedMediaTypes)
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleancanRead(Class<?> clazz, MediaType mediaType)This implementation checks if the given class is supported, and if the supported media typesinclude the given media type.booleancanRead(Type type, Class<?> contextClass, MediaType mediaType)Indicates whether the given type can be read by this converter.booleancanWrite(Class<?> clazz, MediaType mediaType)protected LonggetContentLength(Object object, MediaType contentType)Returns the content length for the given type.protected MediaTypegetDefaultContentType(Object object)Returns the default content type for the given type.protected JavaTypegetJavaType(Type type, Class<?> contextClass)Return the JacksonJavaTypefor the specified type and context class.protected JsonEncodinggetJsonEncoding(MediaType contentType)Determine the JSON encoding to use for the given content type.ObjectMappergetObjectMapper()Return the underlyingObjectMapperfor this view.protected voidinit(ObjectMapper objectMapper)protected voidlogWarningIfNecessary(Type type, Throwable cause)Determine whether to log the given exception coming from aObjectMapper.canDeserialize(com.fasterxml.jackson.databind.JavaType)/ObjectMapper.canSerialize(java.lang.Class<?>)check.Objectread(Type type, Class<?> contextClass, HttpInputMessage inputMessage)Read an object of the given type form the given input message, and returns it.protected ObjectreadInternal(Class<?> clazz, HttpInputMessage inputMessage)Abstract template method that reads the actual object.voidsetObjectMapper(ObjectMapper objectMapper)Set theObjectMapperfor this view.voidsetPrettyPrint(boolean prettyPrint)Whether to use theDefaultPrettyPrinterwhen writing JSON.protected voidwriteInternal(Object object, Type type, HttpOutputMessage outputMessage)Abstract template method that writes the actual body.protected voidwritePrefix(JsonGenerator generator, Object object)Write a prefix before the main content.protected voidwriteSuffix(JsonGenerator generator, Object object)Write a suffix after the main content.Methods inherited from class org.springframework.http.converter.AbstractGenericHttpMessageConverter
canWrite, supports, write, writeInternal
Methods inherited from class org.springframework.http.converter.AbstractHttpMessageConverter
addDefaultHeaders, canRead, canWrite, getDefaultCharset, getSupportedMediaTypes, read, setDefaultCharset, setSupportedMediaTypes, write
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.springframework.http.converter.HttpMessageConverter
getSupportedMediaTypes, read, write
Field Detail
DEFAULT_CHARSET
public static final Charset DEFAULT_CHARSET
objectMapper
protected ObjectMapper objectMapper
Constructor Detail
AbstractJackson2HttpMessageConverter
protected AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper)
AbstractJackson2HttpMessageConverter
protected AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper, MediaType supportedMediaType)
AbstractJackson2HttpMessageConverter
protected AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper, MediaType... supportedMediaTypes)
Method Detail
init
protected void init(ObjectMapper objectMapper)
setObjectMapper
public void setObjectMapper(ObjectMapper objectMapper)
Set theObjectMapperfor this view. If not set, a defaultObjectMapperis used.Setting a custom-configured
ObjectMapperis one way to take further control of the JSON serialization process. For example, an extendedSerializerFactorycan 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.
getObjectMapper
public ObjectMapper getObjectMapper()
Return the underlyingObjectMapperfor this view.
setPrettyPrint
public void setPrettyPrint(boolean prettyPrint)
Whether to use theDefaultPrettyPrinterwhen writing JSON. This is a shortcut for setting up anObjectMapperas follows:ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationFeature.INDENT_OUTPUT, true); converter.setObjectMapper(mapper);
canRead
public boolean canRead(Class<?> clazz, MediaType mediaType)
Description copied from class:AbstractHttpMessageConverterThis implementation checks if the given class is supported, and if the supported media typesinclude the given media type.- Specified by:
canReadin interfaceHttpMessageConverter<Object>- Overrides:
canReadin classAbstractHttpMessageConverter<Object>- Parameters:
clazz- the class to test for readabilitymediaType- the media type to read (can benullif not specified); typically the value of aContent-Typeheader.- Returns:
trueif readable;falseotherwise
canRead
public boolean canRead(Type type, Class<?> contextClass, MediaType mediaType)
Description copied from interface:GenericHttpMessageConverterIndicates whether the given type can be read by this converter. This method should perform the same checks thanHttpMessageConverter.canRead(Class, MediaType)with additional ones related to the generic type.- Specified by:
canReadin interfaceGenericHttpMessageConverter<Object>- Overrides:
canReadin classAbstractGenericHttpMessageConverter<Object>- Parameters:
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 benull)mediaType- the media type to read, can benullif not specified. Typically the value of aContent-Typeheader.- Returns:
trueif readable;falseotherwise
canWrite
public boolean canWrite(Class<?> clazz, MediaType mediaType)
Description copied from class:AbstractHttpMessageConverterThis implementation checks if the given class is supported, and if the supported media types include the given media type.- Specified by:
canWritein interfaceHttpMessageConverter<Object>- Overrides:
canWritein classAbstractHttpMessageConverter<Object>- Parameters:
clazz- the class to test for writabilitymediaType- the media type to write (can benullif not specified); typically the value of anAcceptheader.- Returns:
trueif writable;falseotherwise
logWarningIfNecessary
protected void logWarningIfNecessary(Type type, Throwable cause)
Determine whether to log the given exception coming from aObjectMapper.canDeserialize(com.fasterxml.jackson.databind.JavaType)/ObjectMapper.canSerialize(java.lang.Class<?>)check.- Parameters:
type- the class that Jackson tested for (de-)serializabilitycause- the Jackson-thrown exception to evaluate (typically aJsonMappingException)- Since:
- 4.3
readInternal
protected Object readInternal(Class<?> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException
Description copied from class:AbstractHttpMessageConverterAbstract template method that reads the actual object. Invoked fromAbstractHttpMessageConverter.read(java.lang.Class<? extends T>, org.springframework.http.HttpInputMessage).- Specified by:
readInternalin classAbstractHttpMessageConverter<Object>- Parameters:
clazz- the type of object to returninputMessage- the HTTP input message to read from- Returns:
- the converted object
- Throws:
IOException- in case of I/O errorsHttpMessageNotReadableException- in case of conversion errors
read
public Object read(Type type, Class<?> contextClass, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException
Description copied from interface:GenericHttpMessageConverterRead an object of the given type form the given input message, and returns it.- Parameters:
type- the (potentially generic) type of object to return. This type must have previously been passed to thecanReadmethod of this interface, which must have returnedtrue.contextClass- a context class for the target type, for example a class in which the target type appears in a method signature (can benull)inputMessage- the HTTP input message to read from- Returns:
- the converted object
- Throws:
IOException- in case of I/O errorsHttpMessageNotReadableException- in case of conversion errors
writeInternal
protected void writeInternal(Object object, Type type, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException
Description copied from class:AbstractGenericHttpMessageConverterAbstract template method that writes the actual body. Invoked fromAbstractGenericHttpMessageConverter.write(T, java.lang.reflect.Type, org.springframework.http.MediaType, org.springframework.http.HttpOutputMessage).- Specified by:
writeInternalin classAbstractGenericHttpMessageConverter<Object>- Parameters:
object- the object to write to the output messagetype- the type of object to write (may benull)outputMessage- the HTTP output message to write to- Throws:
IOException- in case of I/O errorsHttpMessageNotWritableException- in case of conversion errors
writePrefix
protected void writePrefix(JsonGenerator generator, Object object) throws IOException
Write a prefix before the main content.- Parameters:
generator- the generator to use for writing content.object- the object to write to the output message.- Throws:
IOException
writeSuffix
protected void writeSuffix(JsonGenerator generator, Object object) throws IOException
Write a suffix after the main content.- Parameters:
generator- the generator to use for writing content.object- the object to write to the output message.- Throws:
IOException
getJavaType
protected JavaType getJavaType(Type type, Class<?> contextClass)
Return the JacksonJavaTypefor 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); } }- Parameters:
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 benull)- Returns:
- the Jackson JavaType
getJsonEncoding
protected JsonEncoding getJsonEncoding(MediaType contentType)
Determine the JSON encoding to use for the given content type.- Parameters:
contentType- the media type as requested by the caller- Returns:
- the JSON encoding to use (never
null)
getDefaultContentType
protected MediaType getDefaultContentType(Object object) throws IOException
Description copied from class:AbstractHttpMessageConverterReturns the default content type for the given type. Called whenAbstractHttpMessageConverter.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
supportedMediaTypesproperty, if any. Can be overridden in subclasses.- Overrides:
getDefaultContentTypein classAbstractHttpMessageConverter<Object>- Parameters:
object- the type to return the content type for- Returns:
- the content type, or
nullif not known - Throws:
IOException
getContentLength
protected Long getContentLength(Object object, MediaType contentType) throws IOException
Description copied from class:AbstractHttpMessageConverterReturns the content length for the given type.By default, this returns
null, meaning that the content length is unknown. Can be overridden in subclasses.- Overrides:
getContentLengthin classAbstractHttpMessageConverter<Object>- Parameters:
object- the type to return the content length for- Returns:
- the content length, or
nullif not known - Throws:
IOException