org.springframework.web.servlet.view.json

## Class MappingJackson2JsonView

- java.lang.Object
- - org.springframework.context.support.ApplicationObjectSupport
  - - org.springframework.web.context.support.WebApplicationObjectSupport
    - - org.springframework.web.servlet.view.AbstractView
      - - org.springframework.web.servlet.view.json.MappingJackson2JsonView

- All Implemented Interfaces:
    Aware, BeanNameAware, ApplicationContextAware, ServletContextAware, View

      public class MappingJackson2JsonView
      extends AbstractView

  Spring MVC `View` that renders JSON content by serializing the model for the current request using Jackson 2's `ObjectMapper`.

  By default, the entire contents of the model map (with the exception of framework-specific classes) will be encoded as JSON. If the model contains only one key, you can have it extracted encoded as JSON alone via `setExtractValueFromSingleKeyModel(boolean)`.

  Since:
    3.1.2
  Author:
    Jeremy Grelle, Arjen Poutsma, Rossen Stoyanchev
  See Also:
    `MappingJackson2HttpMessageConverter`

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static String` | `DEFAULT_CONTENT_TYPE` Default content type.

    - ### Fields inherited from class org.springframework.context.support.ApplicationObjectSupport

      `logger`

    - ### Fields inherited from interface org.springframework.web.servlet.View

      `PATH_VARIABLES, RESPONSE_STATUS_ATTRIBUTE, SELECTED_CONTENT_TYPE`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `MappingJackson2JsonView()` Construct a new `JacksonJsonView`, setting the content type to `application/json`.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected Object` | `filterModel(Map<String,Object> model)` Filters out undesired attributes from the given model.
    `Set<String>` | `getModelKeys()` Return the attributes in the model that should be rendered by this view.
    `Set<String>` | `getRenderedAttributes()` Deprecated. use `getModelKeys()` instead
    `protected void` | `prepareResponse(HttpServletRequest request, HttpServletResponse response)` Prepare the given response for rendering.
    `protected void` | `renderMergedOutputModel(Map<String,Object> model, HttpServletRequest request, HttpServletResponse response)` Subclasses must implement this method to actually render the view.
    `void` | `setDisableCaching(boolean disableCaching)` Disables caching of the generated JSON.
    `void` | `setEncoding(JsonEncoding encoding)` Set the `JsonEncoding` for this converter.
    `void` | `setExtractValueFromSingleKeyModel(boolean extractValueFromSingleKeyModel)` Set whether to serialize models containing a single attribute as a map or whether to extract the single value from the model and serialize it directly.
    `void` | `setModelKey(String modelKey)` Set the attribute in the model that should be rendered by this view.
    `void` | `setModelKeys(Set<String> modelKeys)` Set the attributes in the model that should be rendered by this view.
    `void` | `setObjectMapper(com.fasterxml.jackson.databind.ObjectMapper objectMapper)` Sets the `ObjectMapper` for this view.
    `void` | `setPrefixJson(boolean prefixJson)` Indicates whether the JSON output by this view should be prefixed with `"{} && "`.
    `void` | `setPrettyPrint(boolean prettyPrint)` Whether to use the `DefaultPrettyPrinter` when writing JSON.
    `void` | `setRenderedAttributes(Set<String> renderedAttributes)` Deprecated. use `setModelKeys(Set)` instead
    `void` | `setUpdateContentLength(boolean updateContentLength)` Whether to update the 'Content-Length' header of the response.

    - ### Methods inherited from class org.springframework.web.servlet.view.AbstractView

      `addStaticAttribute, createMergedOutputModel, createRequestContext, createTemporaryOutputStream, exposeModelAsRequestAttributes, generatesDownloadContent, getAttributesMap, getBeanName, getContentType, getRequestContextAttribute, getStaticAttributes, isExposePathVariables, render, setAttributes, setAttributesCSV, setAttributesMap, setBeanName, setContentType, setExposePathVariables, setRequestContextAttribute, setResponseContentType, toString, writeToResponse`

    - ### Methods inherited from class org.springframework.web.context.support.WebApplicationObjectSupport

      `getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContext`

    - ### Methods inherited from class org.springframework.context.support.ApplicationObjectSupport

      `getApplicationContext, getMessageSourceAccessor, initApplicationContext, requiredContextClass, setApplicationContext`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### DEFAULT_CONTENT_TYPE

          public static final String DEFAULT_CONTENT_TYPE

      Default content type. Overridable as bean property.
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### MappingJackson2JsonView

          public MappingJackson2JsonView()

      Construct a new `JacksonJsonView`, setting the content type to `application/json`.

  - ### Method Detail

    - #### setObjectMapper

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

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

    - #### setEncoding

          public void setEncoding(JsonEncoding encoding)

      Set the `JsonEncoding` for this converter. By default, UTF-8 is used.

    - #### setPrefixJson

          public void setPrefixJson(boolean prefixJson)

      Indicates 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);

      The default value is `false`.

    - #### setModelKey

          public void setModelKey(String modelKey)

      Set the attribute in the model that should be rendered by this view. When set, all other model attributes will be ignored.

    - #### setModelKeys

          public void setModelKeys(Set<String> modelKeys)

      Set the attributes in the model that should be rendered by this view. When set, all other model attributes will be ignored.

    - #### getModelKeys

          public Set<String> getModelKeys()

      Return the attributes in the model that should be rendered by this view.

    - #### setRenderedAttributes

          @Deprecated
          public void setRenderedAttributes(Set<String> renderedAttributes)

      Deprecated. use `setModelKeys(Set)` instead
      Set the attributes in the model that should be rendered by this view. When set, all other model attributes will be ignored.

    - #### getRenderedAttributes

          @Deprecated
          public Set<String> getRenderedAttributes()

      Deprecated. use `getModelKeys()` instead
      Return the attributes in the model that should be rendered by this view.

    - #### setExtractValueFromSingleKeyModel

          public void setExtractValueFromSingleKeyModel(boolean extractValueFromSingleKeyModel)

      Set whether to serialize models containing a single attribute as a map or whether to extract the single value from the model and serialize it directly.

      The effect of setting this flag is similar to using `MappingJacksonHttpMessageConverter` with an `@ResponseBody` request-handling method.

      Default is `false`.

    - #### setDisableCaching

          public void setDisableCaching(boolean disableCaching)

      Disables caching of the generated JSON.

      Default is `true`, which will prevent the client from caching the generated JSON.

    - #### setUpdateContentLength

          public void setUpdateContentLength(boolean updateContentLength)

      Whether to update the 'Content-Length' header of the response. When set to `true`, the response is buffered in order to determine the content length and set the 'Content-Length' header of the response.

      The default setting is `false`.

    - #### prepareResponse

          protected void prepareResponse(HttpServletRequest request,
                             HttpServletResponse response)

      Description copied from class: `AbstractView`
      Prepare the given response for rendering.

      The default implementation applies a workaround for an IE bug when sending download content via HTTPS.

      Overrides:
        `prepareResponse` in class `AbstractView`
      Parameters:
        `request` - current HTTP request
        `response` - current HTTP response

    - #### renderMergedOutputModel

          protected void renderMergedOutputModel(Map<String,Object> model,
                                     HttpServletRequest request,
                                     HttpServletResponse response)
                                          throws Exception

      Description copied from class: `AbstractView`
      Subclasses must implement this method to actually render the view.

      The first step will be preparing the request: In the JSP case, this would mean setting model objects as request attributes. The second step will be the actual rendering of the view, for example including the JSP via a RequestDispatcher.

      Specified by:
        `renderMergedOutputModel` in class `AbstractView`
      Parameters:
        `model` - combined output Map (never `null`), with dynamic values taking precedence over static attributes
        `request` - current HTTP request
        `response` - current HTTP response
      Throws:
        `Exception` - if rendering failed

    - #### filterModel

          protected Object filterModel(Map<String,Object> model)

      Filters out undesired attributes from the given model. The return value can be either another `Map` or a single value object.

      The default implementation removes `BindingResult` instances and entries not included in the `renderedAttributes` property.

      Parameters:
        `model` - the model, as passed on to `renderMergedOutputModel(java.util.Map<java.lang.String, java.lang.Object>, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)`
      Returns:
        the object to be rendered