I have a filter with method
public void doFilter(ServletRequest req, ServletResponse rep, FilterChain chain)
My goal is to print to the console the content of rep
. I've tried to do that via
((HttpServletResponse) rep).getWriter()
But getWriter
method do something different.
I also wrote a wrapper:
class HtmlResponseWrapper extends HttpServletResponseWrapper {
private final ByteArrayOutputStream capture;
private ServletOutputStream output;
private PrintWriter writer;
public HtmlResponseWrapper(HttpServletResponse response) {
super(response);
capture = new ByteArrayOutputStream(response.getBufferSize());
}
@Override
public ServletOutputStream getOutputStream() {
if (writer != null) {
throw new IllegalStateException("getWriter() has already been called on this response.");
}
if (output == null) {
output = new ServletOutputStream() {
@Override
public void write(int b) throws IOException {
capture.write(b);
}
};
}
return output;
}
...
}
But invocation os new HtmlResponseWrapper(rep).getOutputStream()
gains not exactly what do I want.
So my question is: how can I print the real body of response?