如何读取 HttpServletReponses 输出流?
我想制作一个Servlet过滤器,它将在处理和完成后读取响应的内容,并以XML或PDF或其他格式返回该信息。但是我不确定如何从HttpServletResponse对象中获取任何信息。我如何获得这些信息?
我想制作一个Servlet过滤器,它将在处理和完成后读取响应的内容,并以XML或PDF或其他格式返回该信息。但是我不确定如何从HttpServletResponse对象中获取任何信息。我如何获得这些信息?
将其添加到筛选器 java 文件中。
static class MyHttpServletResponseWrapper
extends HttpServletResponseWrapper {
private StringWriter sw = new StringWriter(BUFFER_SIZE);
public MyHttpServletResponseWrapper(HttpServletResponse response) {
super(response);
}
public PrintWriter getWriter() throws IOException {
return new PrintWriter(sw);
}
public ServletOutputStream getOutputStream() throws IOException {
throw new UnsupportedOperationException();
}
public String toString() {
return sw.toString();
}
}
使用以下代码:
HttpServletResponse httpResponse = (HttpServletResponse) response;
MyHttpServletResponseWrapper wrapper =
new MyHttpServletResponseWrapper(httpResponse);
chain.doFilter(request, wrapper);
String content = wrapper.toString();
内容变量现在具有输出流。您也可以对二进制内容执行此操作。
春天现在有它的功能 。你需要做的就是使用[ContentCachingResponseWrapper],它有一个方法公共byte[] getContentAsByteArray() 。
我建议制作WrapprFactory,这将允许它可配置,无论是使用默认的RecertWrapper还是ContentCachingResponseWrapper。