【发布时间】:2015-10-21 13:14:23
【问题描述】:
我有一个带有方法的过滤器
public void doFilter(ServletRequest req, ServletResponse rep, FilterChain chain)
我的目标是将rep 的内容打印到控制台。我试图通过
((HttpServletResponse) rep).getWriter()
但是getWriter 方法做了一些不同的事情。
我还写了一个包装器:
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;
}
...
}
但是调用 os new HtmlResponseWrapper(rep).getOutputStream() 获得的并不是我想要的。
所以我的问题是:如何打印真实的回复?
【问题讨论】:
-
答案中的解决方案不适合我。我已经试过了。