org.springframework.web.servlet.view.json

## Class AbstractJackson2View

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

- All Implemented Interfaces:
    Aware, BeanNameAware, ApplicationContextAware, ServletContextAware, View
  Direct Known Subclasses:
    MappingJackson2JsonView, MappingJackson2XmlView

      public abstract class AbstractJackson2View
      extends AbstractView

  Abstract base class for Jackson based and content type independent `AbstractView` implementations.

  Compatible with Jackson 2.9 to 2.12, as of Spring 5.3.

  Since:
    4.1
  Author:
    Jeremy Grelle, Arjen Poutsma, Rossen Stoyanchev, Juergen Hoeller, Sebastien Deleuze

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected boolean` | `updateContentLength`

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

      `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
    Modifier | Constructor and Description
    --- | ---
    `protected` | `AbstractJackson2View(ObjectMapper objectMapper, String contentType)`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected Object` | `filterAndWrapModel(Map<String,Object> model, HttpServletRequest request)` Filter and optionally wrap the model in `MappingJacksonValue` container.
    `protected abstract Object` | `filterModel(Map<String,Object> model)` Filter out undesired attributes from the given model.
    `JsonEncoding` | `getEncoding()` Return the `JsonEncoding` for this view.
    `ObjectMapper` | `getObjectMapper()` Return the `ObjectMapper` for this view.
    `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 view.
    `abstract void` | `setModelKey(String modelKey)` Set the attribute in the model that should be rendered by this view.
    `void` | `setObjectMapper(ObjectMapper objectMapper)` Set the `ObjectMapper` for this view.
    `void` | `setPrettyPrint(boolean prettyPrint)` Whether to use the default pretty printer when writing the output.
    `void` | `setUpdateContentLength(boolean updateContentLength)` Whether to update the 'Content-Length' header of the response.
    `protected void` | `writeContent(OutputStream stream, Object object)` Write the actual JSON content to the stream.
    `protected void` | `writePrefix(JsonGenerator generator, Object object)` Write a prefix before the main content.
    `protected void` | `writeSuffix(JsonGenerator generator, Object object)` Write a suffix after the main content.

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

      `addStaticAttribute, createMergedOutputModel, createRequestContext, createTemporaryOutputStream, exposeModelAsRequestAttributes, formatViewName, generatesDownloadContent, getAttributesMap, getBeanName, getContentType, getRequestContextAttribute, getRequestToExpose, getStaticAttributes, isExposePathVariables, render, setAttributes, setAttributesCSV, setAttributesMap, setBeanName, setContentType, setExposeContextBeansAsAttributes, setExposedContextBeanNames, 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, obtainApplicationContext, requiredContextClass, setApplicationContext`

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

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

- - ### Field Detail

    - #### updateContentLength

          protected boolean updateContentLength

  - ### Constructor Detail

    - #### AbstractJackson2View

          protected AbstractJackson2View(ObjectMapper objectMapper,
                                         String contentType)

  - ### Method Detail

    - #### setObjectMapper

          public void setObjectMapper(ObjectMapper objectMapper)

      Set the `ObjectMapper` for this view. If not set, a default `ObjectMapper` will be used.

      Setting a custom-configured `ObjectMapper` is one way to take further control of the JSON serialization process. The other option is to use Jackson's provided annotations on the types to be serialized, in which case a custom-configured ObjectMapper is unnecessary.

    - #### getObjectMapper

          public final ObjectMapper getObjectMapper()

      Return the `ObjectMapper` for this view.

    - #### setEncoding

          public void setEncoding(JsonEncoding encoding)

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

    - #### getEncoding

          public final JsonEncoding getEncoding()

      Return the `JsonEncoding` for this view.

    - #### setPrettyPrint

          public void setPrettyPrint(boolean prettyPrint)

      Whether to use the default pretty printer when writing the output. This is a shortcut for setting up an `ObjectMapper` as follows:

           ObjectMapper mapper = new ObjectMapper();
           mapper.configure(SerializationFeature.INDENT_OUTPUT, true);

      The default value 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

    - #### filterAndWrapModel

          protected Object filterAndWrapModel(Map<String,Object> model,
                                              HttpServletRequest request)

      Filter and optionally wrap the model in `MappingJacksonValue` container.
      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)`
        `request` - current HTTP request
      Returns:
        the wrapped or unwrapped value to be rendered

    - #### writeContent

          protected void writeContent(OutputStream stream,
                                      Object object)
                               throws IOException

      Write the actual JSON content to the stream.
      Parameters:
        `stream` - the output stream to use
        `object` - the value to be rendered, as returned from `filterModel(java.util.Map<java.lang.String, java.lang.Object>)`
      Throws:
        `IOException` - if writing failed

    - #### setModelKey

          public abstract 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.

    - #### filterModel

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

      Filter out undesired attributes from the given model. The return value can be either another `Map` or a single value object.
      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 value to be rendered

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