Получить тело ответа с помощью 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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