Читать apache ответ HttpClient дважды - PullRequest
0 голосов
/ 03 февраля 2020

Мы используем apache HTTPClient для отправки запроса третьим лицам. Я использовал AOP в методе execute () для регистрации запросов и ответов.

При регистрации ответов с использованием aop я пишу ниже код

КОД КЛАССА AOP:

private void logResponse(Object response, Logger logger, Long startTime) throws ParseException, IOException {
        if(response instanceof HttpResponse) {
            HttpResponse httpResponse = (HttpResponse) response;
            if(httpResponse.getEntity() != null) {
                String log = EntityUtils.toString(
                    httpResponse.getEntity().getContent()  // <== PROBLEMATIC LINE
                );
                logger.info(log);
            }
        }
    }

и в моем классе вызывающего абонента третьей стороны я читаю его снова, поскольку мне нужно сопоставить json строковый ответ с соответствующим классом ответа.

class Connector{
 public <T> postRequest(Class<T> responseClassOfType) {
      HttpResponse response = clientWrapper.sendRequest(httpClient, request);
      String result = EntityUtils.toString(
          response.getEntity()  // ==> faulty code. reading stream second time.
      );
      return mapper.getObjectFromJson(result, responseClassOfType);
 }
}
class ClientWrapper {
public HttpResponse sendRequest(HttpClient httpClient, HttpRequestBase request) throws IOException {
        return httpClient.execute(request);
    }
}

Есть много сообщений, доступных для чтения входного потока дважды, но Я не нашел подходящих ответов в моем случае.

Правильно ли ведется логирование ответа на запрос? Или есть какой-нибудь другой способ регистрации запросов и ответов с помощью httpClient.

Пожалуйста, помогите.

PS: 1. Мы не хотим <logger level="DEBUG" name="org.apache.http.wire" /> в нашем файле logback xml в качестве журналов сгенерированные не показываются должным образом в кибане.

Я не могу изменить методы класса Connector.
...