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?