Class ContentCachingResponseWrapper

java.lang.Object
jakarta.servlet.ServletResponseWrapper
jakarta.servlet.http.HttpServletResponseWrapper
org.springframework.web.util.ContentCachingResponseWrapper
All Implemented Interfaces:
jakarta.servlet.http.HttpServletResponse, jakarta.servlet.ServletResponse

public class ContentCachingResponseWrapper extends jakarta.servlet.http.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:
  • 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_MISDIRECTED_REQUEST, 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_PERMANENT_REDIRECT, 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_UNPROCESSABLE_CONTENT, SC_UNSUPPORTED_MEDIA_TYPE, SC_UPGRADE_REQUIRED, SC_USE_PROXY
  • Constructor Summary

    Constructors
    Constructor
    Description
    ContentCachingResponseWrapper(jakarta.servlet.http.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
     
    void
    Copy the complete cached body content to the response.
    protected void
    copyBodyToResponse(boolean complete)
    Copy the cached body content to the response.
    void
    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[]
    Return the cached response content as a byte array.
    Return an InputStream to the cached content.
    int
    Return the current size of the cached content.
     
     
     
    jakarta.servlet.ServletOutputStream
     
     
    void
     
    void
     
    void
    sendError(int sc)
     
    void
    sendError(int sc, String msg)
     
    void
    sendRedirect(String location)
     
    void
    setBufferSize(int size)
     
    void
     
    void
     
    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, sendRedirect, sendRedirect, sendRedirect, setDateHeader, setStatus, setTrailerFields

    Methods inherited from class jakarta.servlet.ServletResponseWrapper

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

    Methods inherited from class 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, setCharacterEncoding, setContentType, setLocale
  • Constructor Details

    • ContentCachingResponseWrapper

      public ContentCachingResponseWrapper(jakarta.servlet.http.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 jakarta.servlet.http.HttpServletResponse
      Overrides:
      sendError in class jakarta.servlet.http.HttpServletResponseWrapper
      Throws:
      IOException
    • sendError

      public void sendError(int sc, String msg) throws IOException
      Specified by:
      sendError in interface jakarta.servlet.http.HttpServletResponse
      Overrides:
      sendError in class jakarta.servlet.http.HttpServletResponseWrapper
      Throws:
      IOException
    • sendRedirect

      public void sendRedirect(String location) throws IOException
      Specified by:
      sendRedirect in interface jakarta.servlet.http.HttpServletResponse
      Overrides:
      sendRedirect in class jakarta.servlet.http.HttpServletResponseWrapper
      Throws:
      IOException
    • getOutputStream

      public jakarta.servlet.ServletOutputStream getOutputStream() throws IOException
      Specified by:
      getOutputStream in interface jakarta.servlet.ServletResponse
      Overrides:
      getOutputStream in class jakarta.servlet.ServletResponseWrapper
      Throws:
      IOException
    • getWriter

      public PrintWriter getWriter() throws IOException
      Specified by:
      getWriter in interface jakarta.servlet.ServletResponse
      Overrides:
      getWriter in class jakarta.servlet.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 jakarta.servlet.ServletResponse
      Overrides:
      flushBuffer in class jakarta.servlet.ServletResponseWrapper
      Throws:
      IOException
      See Also:
      • ServletResponseWrapper.flushBuffer()
    • setContentLength

      public void setContentLength(int len)
      Specified by:
      setContentLength in interface jakarta.servlet.ServletResponse
      Overrides:
      setContentLength in class jakarta.servlet.ServletResponseWrapper
    • setContentLengthLong

      public void setContentLengthLong(long len)
      Specified by:
      setContentLengthLong in interface jakarta.servlet.ServletResponse
      Overrides:
      setContentLengthLong in class jakarta.servlet.ServletResponseWrapper
    • containsHeader

      public boolean containsHeader(String name)
      Specified by:
      containsHeader in interface jakarta.servlet.http.HttpServletResponse
      Overrides:
      containsHeader in class jakarta.servlet.http.HttpServletResponseWrapper
    • setHeader

      public void setHeader(String name, String value)
      Specified by:
      setHeader in interface jakarta.servlet.http.HttpServletResponse
      Overrides:
      setHeader in class jakarta.servlet.http.HttpServletResponseWrapper
    • addHeader

      public void addHeader(String name, String value)
      Specified by:
      addHeader in interface jakarta.servlet.http.HttpServletResponse
      Overrides:
      addHeader in class jakarta.servlet.http.HttpServletResponseWrapper
    • setIntHeader

      public void setIntHeader(String name, int value)
      Specified by:
      setIntHeader in interface jakarta.servlet.http.HttpServletResponse
      Overrides:
      setIntHeader in class jakarta.servlet.http.HttpServletResponseWrapper
    • addIntHeader

      public void addIntHeader(String name, int value)
      Specified by:
      addIntHeader in interface jakarta.servlet.http.HttpServletResponse
      Overrides:
      addIntHeader in class jakarta.servlet.http.HttpServletResponseWrapper
    • getHeader

      public @Nullable String getHeader(String name)
      Specified by:
      getHeader in interface jakarta.servlet.http.HttpServletResponse
      Overrides:
      getHeader in class jakarta.servlet.http.HttpServletResponseWrapper
    • getHeaders

      public Collection<String> getHeaders(String name)
      Specified by:
      getHeaders in interface jakarta.servlet.http.HttpServletResponse
      Overrides:
      getHeaders in class jakarta.servlet.http.HttpServletResponseWrapper
    • getHeaderNames

      public Collection<String> getHeaderNames()
      Specified by:
      getHeaderNames in interface jakarta.servlet.http.HttpServletResponse
      Overrides:
      getHeaderNames in class jakarta.servlet.http.HttpServletResponseWrapper
    • setBufferSize

      public void setBufferSize(int size)
      Specified by:
      setBufferSize in interface jakarta.servlet.ServletResponse
      Overrides:
      setBufferSize in class jakarta.servlet.ServletResponseWrapper
    • resetBuffer

      public void resetBuffer()
      Specified by:
      resetBuffer in interface jakarta.servlet.ServletResponse
      Overrides:
      resetBuffer in class jakarta.servlet.ServletResponseWrapper
    • reset

      public void reset()
      Specified by:
      reset in interface jakarta.servlet.ServletResponse
      Overrides:
      reset in class jakarta.servlet.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