Преобразовать 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());
Другие вопросы по тегам