Код: Выделить всё
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
Мобильная версия