org.springframework.http.converter.json

## Class MappingJacksonHttpMessageConverter

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

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

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

  Implementation of `HttpMessageConverter` that can read and write JSON using Jackson'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.0
  Author:
    Arjen Poutsma
  See Also:
    `MappingJacksonJsonView`

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static Charset` | `DEFAULT_CHARSET`

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

      `logger`

  - ### Constructor Summary

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

  - ### Method Summary

    Methods
    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)` This implementation checks if the given class is supported, and if the supported media types include the given media 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 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` | `setJsonPrefix(String jsonPrefix)` Specify a custom prefix to use for this view's JSON output.
    `void` | `setObjectMapper(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

    - #### MappingJacksonHttpMessageConverter

          public MappingJacksonHttpMessageConverter()

      Construct a new `MappingJacksonHttpMessageConverter`.

  - ### Method Detail

    - #### setObjectMapper

          public void setObjectMapper(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 ObjectMapper getObjectMapper()

      Return the underlying `ObjectMapper` for this view.

    - #### setJsonPrefix

          public void setJsonPrefix(String jsonPrefix)

      Specify a custom prefix to use for this view's JSON output. Default is none.
      See Also:
        `setPrefixJson(boolean)`

    - #### 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.

      See Also:
        `setJsonPrefix(java.lang.String)`

    - #### 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(SerializationConfig.Feature.INDENT_OUTPUT, true);
           converter.setObjectMapper(mapper);

      The default value is `false`.

    - #### 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 JavaType getJavaType(Type type,
                             Class<?> contextClass)

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

      The default implementation returns `TypeFactory.type(java.lang.reflect.Type)` or `TypeFactory.type(type, TypeFactory.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`
      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`)