Мы используем 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.