Package org.springframework.web.util

# Class ContentCachingResponseWrapper

java.lang.Object
jakarta.servlet.ServletResponseWrapper
jakarta.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, for example, by `ShallowEtagHeaderFilter`.

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

## Field Summary

### Fields inherited from interface jakarta.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
Description
`ContentCachingResponseWrapper(HttpServletResponse response)`
Create a new ContentCachingResponseWrapper for the given servlet response.

## Method Summary

Modifier and Type
Method
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()`
`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 jakarta.servlet.http.HttpServletResponseWrapper

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

### Methods inherited from class jakarta.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 jakarta.servlet.ServletResponse

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

## Constructor Details

### ContentCachingResponseWrapper

public ContentCachingResponseWrapper(HttpServletResponse response)
Create a new ContentCachingResponseWrapper for the given servlet response.

Parameters:
  `response` - the original servlet response

## Method Details

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

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