# MappingJacksonHttpMessageConverter
Date: 2011-12-22

## 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:
  HttpMessageConverter<Object>

    public class MappingJacksonHttpMessageConverter

extends AbstractHttpMessageConverter<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
`static Charset` `DEFAULT_CHARSET`

Fields inherited from class org.springframework.http.converter.AbstractHttpMessageConverter
`logger`

Constructor Summary
`MappingJacksonHttpMessageConverter()` Construct a new `BindingJacksonHttpMessageConverter`.

Method Summary
`boolean` `canRead(Class<?> clazz, MediaType mediaType)` Indicates whether the given class can be read by this converter.
`boolean` `canWrite(Class<?> clazz, MediaType mediaType)` Indicates whether the given class can be written by this converter.
`protected org.codehaus.jackson.type.JavaType` `getJavaType(Class<?> clazz)` Return the Jackson `JavaType` for the specified class.
`protected org.codehaus.jackson.JsonEncoding` `getJsonEncoding(MediaType contentType)` Determine the JSON encoding to use for the given content type.
`org.codehaus.jackson.map.ObjectMapper` `getObjectMapper()` Return the underlying `ObjectMapper` for this view.
`protected Object` `readInternal(Class<?> clazz, HttpInputMessage inputMessage)` Abstract template method that reads the actualy object.
`void` `setObjectMapper(org.codehaus.jackson.map.ObjectMapper objectMapper)` Set the `ObjectMapper` for this view.
`void` `setPrefixJson(boolean prefixJson)` Indicate whether the JSON output by this view should be prefixed with "{} &&".
`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`

Field Detail

### DEFAULT_CHARSET

    public static final Charset DEFAULT_CHARSET

Constructor Detail

### MappingJacksonHttpMessageConverter

    public MappingJacksonHttpMessageConverter()

  Construct a new `BindingJacksonHttpMessageConverter`.

Method Detail

### setObjectMapper

    public void setObjectMapper(org.codehaus.jackson.map.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 org.codehaus.jackson.map.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.

### canRead

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

  Description copied from class: `AbstractHttpMessageConverter`
  Indicates whether the given class can be read by this converter.

  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

### canWrite

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

  Description copied from class: `AbstractHttpMessageConverter`
  Indicates whether the given class can be written by this converter.

  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 actualy 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

### 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 org.codehaus.jackson.type.JavaType getJavaType(Class<?> clazz)

  Return the Jackson `JavaType` for the specified class.

  The default implementation returns `TypeFactory.type(java.lang.reflect.Type)`, but this can be overridden in subclasses, to allow for custom generic collection handling. For instance:

       protected JavaType getJavaType(Class<?> clazz) {
         if (List.class.isAssignableFrom(clazz)) {
           return TypeFactory.collectionType(ArrayList.class, MyBean.class);
         } else {
           return super.getJavaType(clazz);
         }
       }

  Parameters:
    `clazz` - the class to return the java type for
  Returns:
    the java type

### getJsonEncoding

    protected org.codehaus.jackson.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`)