Задать вопрос
@parkito

Как написать фильтр для чтения body в response?

Здравствуйте. Помогите, пожалуйста, решить проблему.
Пишу фильтр, из которого я бы мог извлечь информацию из outputStream

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();
  }
}

Однако после того, как я проталкиваю его в цепь, я получаю response body, но на этом цепь прерывается
HttpServletResponse httpResponse = (HttpServletResponse) response;
MyHttpServletResponseWrapper wrapper = 
  new MyHttpServletResponseWrapper(httpResponse);

chain.doFilter(request, wrapper);

String content = wrapper.toString();


Т.Е. Я получаю код страницы из стрима, но сама страница в браузере не отображается.
Как мне сделать так, чтобы при извлечении body страница продолжала нормально отображаться?
  • Вопрос задан
  • 118 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
Дело в том, что стрим можно читать лишь единожды, на то это и стрим. После чтения стрима тебе нужно создать новый стрим из тех же данных, свапнуть и подать его дальше по цепи.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы