org.springframework.web.util

## Class ContentCachingResponseWrapper

- java.lang.Object
- - javax.servlet.ServletResponseWrapper
  - - javax.servlet.http.HttpServletResponseWrapper
    - - org.springframework.web.util.ContentCachingResponseWrapper

- All Implemented Interfaces:
    HttpServletResponse, ServletResponse

      public class ContentCachingResponseWrapper
      extends HttpServletResponseWrapper

  `HttpServletResponse` wrapper that caches all content written to the output stream and writer, and allows this content to be retrieved via a byte array.

  Used e.g. by `ShallowEtagHeaderFilter`. Note: As of Spring Framework 5.0, this wrapper is built on the Servlet 3.1 API.

  Since:
    4.1.3
  Author:
    Juergen Hoeller, Sam Brannen
  See Also:
    `ContentCachingRequestWrapper`

- - ### Field Summary

    - ### Fields inherited from interface javax.servlet.http.HttpServletResponse

      `SC_ACCEPTED, SC_BAD_GATEWAY, SC_BAD_REQUEST, SC_CONFLICT, SC_CONTINUE, SC_CREATED, SC_EXPECTATION_FAILED, SC_FORBIDDEN, SC_FOUND, SC_GATEWAY_TIMEOUT, SC_GONE, SC_HTTP_VERSION_NOT_SUPPORTED, SC_INTERNAL_SERVER_ERROR, SC_LENGTH_REQUIRED, SC_METHOD_NOT_ALLOWED, SC_MOVED_PERMANENTLY, SC_MOVED_TEMPORARILY, SC_MULTIPLE_CHOICES, SC_NO_CONTENT, SC_NON_AUTHORITATIVE_INFORMATION, SC_NOT_ACCEPTABLE, SC_NOT_FOUND, SC_NOT_IMPLEMENTED, SC_NOT_MODIFIED, SC_OK, SC_PARTIAL_CONTENT, SC_PAYMENT_REQUIRED, SC_PRECONDITION_FAILED, SC_PROXY_AUTHENTICATION_REQUIRED, SC_REQUEST_ENTITY_TOO_LARGE, SC_REQUEST_TIMEOUT, SC_REQUEST_URI_TOO_LONG, SC_REQUESTED_RANGE_NOT_SATISFIABLE, SC_RESET_CONTENT, SC_SEE_OTHER, SC_SERVICE_UNAVAILABLE, SC_SWITCHING_PROTOCOLS, SC_TEMPORARY_REDIRECT, SC_UNAUTHORIZED, SC_UNSUPPORTED_MEDIA_TYPE, SC_USE_PROXY`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ContentCachingResponseWrapper(HttpServletResponse response)` Create a new ContentCachingResponseWrapper for the given servlet response.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods Deprecated Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addHeader(String name, String value)`
    `void` | `addIntHeader(String name, int value)`
    `boolean` | `containsHeader(String name)`
    `void` | `copyBodyToResponse()` Copy the complete cached body content to the response.
    `protected void` | `copyBodyToResponse(boolean complete)` Copy the cached body content to the response.
    `void` | `flushBuffer()` This method neither flushes content to the client nor commits the underlying response, since the content has not yet been copied to the response.
    `byte[]` | `getContentAsByteArray()` Return the cached response content as a byte array.
    `InputStream` | `getContentInputStream()` Return an `InputStream` to the cached content.
    `int` | `getContentSize()` Return the current size of the cached content.
    `String` | `getHeader(String name)`
    `Collection<String>` | `getHeaderNames()`
    `Collection<String>` | `getHeaders(String name)`
    `ServletOutputStream` | `getOutputStream()`
    `int` | `getStatusCode()` Deprecated. as of 5.2 in favor of `HttpServletResponse.getStatus()`
    `PrintWriter` | `getWriter()`
    `void` | `reset()`
    `void` | `resetBuffer()`
    `void` | `sendError(int sc)`
    `void` | `sendError(int sc, String msg)`
    `void` | `sendRedirect(String location)`
    `void` | `setBufferSize(int size)`
    `void` | `setContentLength(int len)`
    `void` | `setContentLengthLong(long len)`
    `void` | `setHeader(String name, String value)`
    `void` | `setIntHeader(String name, int value)`

    - ### Methods inherited from class javax.servlet.http.HttpServletResponseWrapper

      `addCookie, addDateHeader, encodeRedirectUrl, encodeRedirectURL, encodeUrl, encodeURL, getStatus, getTrailerFields, setDateHeader, setStatus, setStatus, setTrailerFields`

    - ### Methods inherited from class javax.servlet.ServletResponseWrapper

      `getBufferSize, getCharacterEncoding, getContentType, getLocale, getResponse, isCommitted, isWrapperFor, isWrapperFor, setCharacterEncoding, setContentType, setLocale, setResponse`

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

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

    - ### Methods inherited from interface javax.servlet.ServletResponse

      `getBufferSize, getCharacterEncoding, getContentType, getLocale, isCommitted, setCharacterEncoding, setContentType, setLocale`

- - ### Constructor Detail

    - #### ContentCachingResponseWrapper

          public ContentCachingResponseWrapper(HttpServletResponse response)

      Create a new ContentCachingResponseWrapper for the given servlet response.
      Parameters:
        `response` - the original servlet response

  - ### Method Detail

    - #### sendError

          public void sendError(int sc)
                         throws IOException

      Specified by:
        `sendError` in interface `HttpServletResponse`
      Overrides:
        `sendError` in class `HttpServletResponseWrapper`
      Throws:
        `IOException`

    - #### sendError

          public void sendError(int sc,
                                String msg)
                         throws IOException

      Specified by:
        `sendError` in interface `HttpServletResponse`
      Overrides:
        `sendError` in class `HttpServletResponseWrapper`
      Throws:
        `IOException`

    - #### sendRedirect

          public void sendRedirect(String location)
                            throws IOException

      Specified by:
        `sendRedirect` in interface `HttpServletResponse`
      Overrides:
        `sendRedirect` in class `HttpServletResponseWrapper`
      Throws:
        `IOException`

    - #### getOutputStream

          public ServletOutputStream getOutputStream()
                                              throws IOException

      Specified by:
        `getOutputStream` in interface `ServletResponse`
      Overrides:
        `getOutputStream` in class `ServletResponseWrapper`
      Throws:
        `IOException`

    - #### getWriter

          public PrintWriter getWriter()
                                throws IOException

      Specified by:
        `getWriter` in interface `ServletResponse`
      Overrides:
        `getWriter` in class `ServletResponseWrapper`
      Throws:
        `IOException`

    - #### flushBuffer

          public void flushBuffer()
                           throws IOException

      This method neither flushes content to the client nor commits the underlying response, since the content has not yet been copied to the response.

      Invoke `copyBodyToResponse()` to copy the cached body content to the wrapped response object and flush its buffer.

      Specified by:
        `flushBuffer` in interface `ServletResponse`
      Overrides:
        `flushBuffer` in class `ServletResponseWrapper`
      Throws:
        `IOException`
      See Also:
        `ServletResponseWrapper.flushBuffer()`

    - #### setContentLength

          public void setContentLength(int len)

      Specified by:
        `setContentLength` in interface `ServletResponse`
      Overrides:
        `setContentLength` in class `ServletResponseWrapper`

    - #### setContentLengthLong

          public void setContentLengthLong(long len)

      Specified by:
        `setContentLengthLong` in interface `ServletResponse`
      Overrides:
        `setContentLengthLong` in class `ServletResponseWrapper`

    - #### containsHeader

          public boolean containsHeader(String name)

      Specified by:
        `containsHeader` in interface `HttpServletResponse`
      Overrides:
        `containsHeader` in class `HttpServletResponseWrapper`

    - #### setHeader

          public void setHeader(String name,
                                String value)

      Specified by:
        `setHeader` in interface `HttpServletResponse`
      Overrides:
        `setHeader` in class `HttpServletResponseWrapper`

    - #### addHeader

          public void addHeader(String name,
                                String value)

      Specified by:
        `addHeader` in interface `HttpServletResponse`
      Overrides:
        `addHeader` in class `HttpServletResponseWrapper`

    - #### setIntHeader

          public void setIntHeader(String name,
                                   int value)

      Specified by:
        `setIntHeader` in interface `HttpServletResponse`
      Overrides:
        `setIntHeader` in class `HttpServletResponseWrapper`

    - #### addIntHeader

          public void addIntHeader(String name,
                                   int value)

      Specified by:
        `addIntHeader` in interface `HttpServletResponse`
      Overrides:
        `addIntHeader` in class `HttpServletResponseWrapper`

    - #### getHeader

          @Nullable
          public String getHeader(String name)

      Specified by:
        `getHeader` in interface `HttpServletResponse`
      Overrides:
        `getHeader` in class `HttpServletResponseWrapper`

    - #### getHeaders

          public Collection<String> getHeaders(String name)

      Specified by:
        `getHeaders` in interface `HttpServletResponse`
      Overrides:
        `getHeaders` in class `HttpServletResponseWrapper`

    - #### getHeaderNames

          public Collection<String> getHeaderNames()

      Specified by:
        `getHeaderNames` in interface `HttpServletResponse`
      Overrides:
        `getHeaderNames` in class `HttpServletResponseWrapper`

    - #### setBufferSize

          public void setBufferSize(int size)

      Specified by:
        `setBufferSize` in interface `ServletResponse`
      Overrides:
        `setBufferSize` in class `ServletResponseWrapper`

    - #### resetBuffer

          public void resetBuffer()

      Specified by:
        `resetBuffer` in interface `ServletResponse`
      Overrides:
        `resetBuffer` in class `ServletResponseWrapper`

    - #### reset

          public void reset()

      Specified by:
        `reset` in interface `ServletResponse`
      Overrides:
        `reset` in class `ServletResponseWrapper`

    - #### getStatusCode

          @Deprecated
          public int getStatusCode()

      Deprecated. as of 5.2 in favor of `HttpServletResponse.getStatus()`
      Return the status code as specified on the response.

    - #### getContentAsByteArray

          public byte[] getContentAsByteArray()

      Return the cached response content as a byte array.

    - #### getContentInputStream

          public InputStream getContentInputStream()

      Return an `InputStream` to the cached content.
      Since:
        4.2

    - #### getContentSize

          public int getContentSize()

      Return the current size of the cached content.
      Since:
        4.2

    - #### copyBodyToResponse

          public void copyBodyToResponse()
                                  throws IOException

      Copy the complete cached body content to the response.
      Throws:
        `IOException`
      Since:
        4.2

    - #### copyBodyToResponse

          protected void copyBodyToResponse(boolean complete)
                                     throws IOException

      Copy the cached body content to the response.
      Parameters:
        `complete` - whether to set a corresponding content length for the complete cached body content
      Throws:
        `IOException`
      Since:
        4.2