Преобразовать HttpServletResponse в строку
Я работаю в весеннем загрузочном приложении, где я определил перехватчик. В методе postHandle перехватчиков я получаю HttpServletRequest и HttpServletResponse. Теперь я хочу преобразовать этот HttpServletResponse в String. Как я могу это сделать? Ниже я прикрепил свой код
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse res, Object o, ModelAndView mav) throws Exception {
OutputStream outputStream = res.getOutputStream();
///Convert this outputstream to String
}
Этот выходной поток - ServletOutputstream. Я не могу преобразовать его в BytearrayOutputStream, если бы я мог сделать это, я мог бы преобразовать его в String.Now Что я должен делать???
0 ответов
Для этого есть 2 варианта.1 -
public class MyFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final ByteArrayPrintWriter pw = new ByteArrayPrintWriter(baos);
HttpServletResponse wrappedResp = new HttpServletResponseWrapper((HttpServletResponse) servletResponse) {
@Override
public PrintWriter getWriter() {
return pw;
}
@Override
public ServletOutputStream getOutputStream() {
return new ServletOutputStream() {
@Override
public void write(int b) {
baos.write(b);
}
};
}
};
filterChain.doFilter(servletRequest, wrappedResp);
byte[] bytes = baos.toByteArray();
String responseStr = new String(bytes);
servletResponse.getOutputStream().write(bytes);
}
public void destroy() {}
public static class ByteArrayPrintWriter extends PrintWriter {
public ByteArrayPrintWriter(OutputStream out) {
super(out);
}
}
}
2 способ прост, но работает с версией spring-web-4*.jar
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
ContentCachingRequestWrapper requestWrapper = new ContentCachingRequestWrapper(request);
ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper(response);
Instant start = Instant.now();
filterChain.doFilter(requestWrapper, responseWrapper);
Instant finish = Instant.now();
long timeElapsed = Duration.between(start, finish).toMillis();
byte[] responseArray = responseWrapper.getContentAsByteArray();
String responseStr = new String(responseArray, responseWrapper.getCharacterEncoding());