org.springframework.http.converter.json

## Class MappingJackson2HttpMessageConverter

- java.lang.Object
- - org.springframework.http.converter.AbstractHttpMessageConverter<Object>
  - - org.springframework.http.converter.json.MappingJackson2HttpMessageConverter

All Implemented Interfaces:
  GenericHttpMessageConverter<Object>, HttpMessageConverter<Object>

    public class MappingJackson2HttpMessageConverter
    extends AbstractHttpMessageConverter<Object>
    implements GenericHttpMessageConverter<Object>

Implementation of `HttpMessageConverter` that can read and write JSON using Jackson 2's `ObjectMapper`.

This converter can be used to bind to typed beans, or untyped `HashMap` instances.

By default, this converter supports `application/json`. This can be overridden by setting the `supportedMediaTypes` property.

Since:
  3.1.2
Author:
  Arjen Poutsma, Keith Donald, Rossen Stoyanchev
See Also:
  `MappingJackson2JsonView`

### Field Summary

Fields
`static Charset` `DEFAULT_CHARSET`

### Fields inherited from class org.springframework.http.converter.AbstractHttpMessageConverter

`logger`

### Constructor Summary

Constructors
Constructor and Description
`MappingJackson2HttpMessageConverter()` Construct a new `MappingJackson2HttpMessageConverter`.

### Method Summary

Methods
`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)` This implementation checks if the given class is supported, and if the supported media types include the given media type.
`protected com.fasterxml.jackson.databind.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.
`com.fasterxml.jackson.databind.ObjectMapper` `getObjectMapper()` Return the underlying `ObjectMapper` for this view.
`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` `setObjectMapper(com.fasterxml.jackson.databind.ObjectMapper objectMapper)` Set the `ObjectMapper` for this view.
`void` `setPrefixJson(boolean prefixJson)` Indicate whether the JSON output by this view should be prefixed with "{} &&".
`void` `setPrettyPrint(boolean prettyPrint)` Whether to use the `DefaultPrettyPrinter` when writing JSON.
`protected boolean` `supports(Class<?> clazz)` Indicates whether the given class is supported by this converter.
`protected void` `writeInternal(Object object, HttpOutputMessage outputMessage)` Abstract template method that writes the actual body.

### Methods inherited from class org.springframework.http.converter.AbstractHttpMessageConverter

`canRead, canWrite, getContentLength, getDefaultContentType, getSupportedMediaTypes, read, 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

### Constructor Detail

#### MappingJackson2HttpMessageConverter

    public MappingJackson2HttpMessageConverter()

Construct a new `MappingJackson2HttpMessageConverter`.

### Method Detail

#### setObjectMapper

    public void setObjectMapper(com.fasterxml.jackson.databind.ObjectMapper objectMapper)

Set the `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 `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.

#### getObjectMapper

    public com.fasterxml.jackson.databind.ObjectMapper getObjectMapper()

Return the underlying `ObjectMapper` for this view.

#### setPrefixJson

    public void setPrefixJson(boolean prefixJson)

Indicate whether the JSON output by this view should be prefixed with "{} &&". Default is false.

Prefixing the JSON string in this manner is used to help prevent JSON Hijacking. The prefix renders the string syntactically invalid as a script so that it cannot be hijacked. This prefix does not affect the evaluation of JSON, but if JSON validation is performed on the string, the prefix would need to be ignored.

#### setPrettyPrint

    public void setPrettyPrint(boolean prettyPrint)

Whether to use the `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);

#### canRead

    public boolean canRead(Class<?> clazz,
                  MediaType mediaType)

Description copied from class: `AbstractHttpMessageConverter`
This implementation checks if the given class is supported, and if the supported media types include the given media type.

Specified by:
  `canRead` in interface `HttpMessageConverter<Object>`
Overrides:
  `canRead` in class `AbstractHttpMessageConverter<Object>`
Parameters:
  `clazz` - the class to test for readability
  `mediaType` - the media type to read, can be `null` if not specified. Typically the value of a `Content-Type` header.
Returns:
  `true` if readable; `false` otherwise

#### canRead

    public boolean canRead(Type type,
                  Class<?> contextClass,
                  MediaType mediaType)

Description copied from interface: `GenericHttpMessageConverter`
Indicates whether the given type can be read by this converter.

Specified by:
  `canRead` in interface `GenericHttpMessageConverter<Object>`
Parameters:
  `type` - the type to test for readability
  `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`
  `mediaType` - the media type to read, can be `null` if not specified. Typically the value of a `Content-Type` header.
Returns:
  `true` if readable; `false` otherwise

#### canWrite

    public boolean canWrite(Class<?> clazz,
                   MediaType mediaType)

Description copied from class: `AbstractHttpMessageConverter`
This implementation checks if the given class is supported, and if the supported media types include the given media type.

Specified by:
  `canWrite` in interface `HttpMessageConverter<Object>`
Overrides:
  `canWrite` in class `AbstractHttpMessageConverter<Object>`
Parameters:
  `clazz` - the class to test for writability
  `mediaType` - the media type to write, can be `null` if not specified. Typically the value of an `Accept` header.
Returns:
  `true` if writable; `false` otherwise

#### supports

    protected boolean supports(Class<?> clazz)

Description copied from class: `AbstractHttpMessageConverter`
Indicates whether the given class is supported by this converter.

Specified by:
  `supports` in class `AbstractHttpMessageConverter<Object>`
Parameters:
  `clazz` - the class to test for support
Returns:
  `true` if supported; `false` otherwise

#### readInternal

    protected Object readInternal(Class<?> clazz,
                      HttpInputMessage inputMessage)
                           throws IOException,
                                  HttpMessageNotReadableException

Description copied from class: `AbstractHttpMessageConverter`
Abstract template method that reads the actual object. Invoked from `AbstractHttpMessageConverter.read(java.lang.Class<? extends T>, org.springframework.http.HttpInputMessage)`.

Specified by:
  `readInternal` in class `AbstractHttpMessageConverter<Object>`
Parameters:
  `clazz` - the type of object to return
  `inputMessage` - the HTTP input message to read from
Returns:
  the converted object
Throws:
  `IOException` - in case of I/O errors
  `HttpMessageNotReadableException` - in case of conversion errors

#### read

    public Object read(Type type,
              Class<?> contextClass,
              HttpInputMessage inputMessage)
                throws IOException,
                       HttpMessageNotReadableException

Description copied from interface: `GenericHttpMessageConverter`
Read an object of the given type form the given input message, and returns it.

Specified by:
  `read` in interface `GenericHttpMessageConverter<Object>`
Parameters:
  `type` - the 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 from
Returns:
  the converted object
Throws:
  `IOException` - in case of I/O errors
  `HttpMessageNotReadableException` - in case of conversion errors

#### writeInternal

    protected void writeInternal(Object object,
                     HttpOutputMessage outputMessage)
                          throws IOException,
                                 HttpMessageNotWritableException

Description copied from class: `AbstractHttpMessageConverter`
Abstract template method that writes the actual body. Invoked from `AbstractHttpMessageConverter.write(T, org.springframework.http.MediaType, org.springframework.http.HttpOutputMessage)`.

Specified by:
  `writeInternal` in class `AbstractHttpMessageConverter<Object>`
Parameters:
  `object` - the object to write to the output message
  `outputMessage` - the message to write to
Throws:
  `IOException` - in case of I/O errors
  `HttpMessageNotWritableException` - in case of conversion errors

#### getJavaType

    protected com.fasterxml.jackson.databind.JavaType getJavaType(Type type,
                                                      Class<?> contextClass)

Return the Jackson `JavaType` for the specified type and context class.

The default implementation returns `ObjectMapper.constructType(java.lang.reflect.Type)` or `ObjectMapper.getTypeFactory().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 type to return the java type for
  `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` signature, can be `null`
Returns:
  the java type

#### 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`)