Получить тело ответа с помощью ContainerResponseFilterJAVA

Программисты JAVA общаются здесь
Anonymous
Получить тело ответа с помощью ContainerResponseFilter

Сообщение Anonymous »

Я пытаюсь перехватить поток объекта ответа, используя getEntityStream() из ContainerResponseContext. Ниже приведен код:

Код: Выделить всё

public String getResponseEntityStream(ContainerResponseContext context) throws IOException {

OutputStream originalStream = context.getEntityStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
context.setEntityStream(baos);

String body = baos.toString();
baos.writeTo(originalStream);
baos.close();
context.setEntityStream(originalStream);
return body;
}
Я вызываю указанный выше метод в приведенном ниже коде, чтобы получить весь поток ответов:

Код: Выделить всё

@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
throws IOException {

StringBuilder sbResponse = new StringBuilder();

sbResponse.append(" - Response Entity Class: ").append(responseContext.getEntityClass())
.append(System.getProperty("line.separator"));

sbResponse.append(" - Response Entity Stream: ").append(getResponseEntityStream(responseContext))
.append(System.getProperty("line.separator"));

System.out.println("HTTP RESPONSE : " + "\n" + sbResponse.toString());
}
Мой вопрос:
В приведенном выше коде поток сущности ответа всегда пуст. Я просто пытаюсь прочитать весь поток объектов ответа и распечатать его, чтобы показать, как выглядит исходный поток, прежде чем выполнять некоторую обработку потока. Где я делаю ошибку? Заранее спасибо.
ОБНОВЛЕНИЕ:
Я могу получить тело ответа с помощью WriterInterceptor. Однако WriterInterceptor вызывается только при наличии полезных данных ответа. Я использую ContainerResponseFilter, так как хочу прочитать детали ответа, даже если полезная нагрузка отсутствует. Кроме того, Writer Interceptor не поддерживает методы getStatus() и getStatusInfo(), в отличие от ContainerResponseFilter. Есть ли способ объединить данные ContainerResponseFilter и WriterInterceptor в строку и распечатать весь ответ в журналах. может быть с помощью Thread Local?

Подробнее здесь: https://stackoverflow.com/questions/759 ... onsefilter

Вернуться в «JAVA»