Ниже приведен код перехватчика для запроса и ответа на регистрацию при выполнении вызова Async Rest Call из Spring AsyncRestTemplate
. Этот код работает, если мы можем использовать BufferingClientHttpResponseWrapper
в другом пакете. Here - некоторые подробности о BufferingClientHttpResponseWrapper
и как добавить его с помощью AsyncRestTemplate. Мой вопрос, когда я использую HttpComponentsAsyncClientHttpRequestFactory
в моем AsyncRestTemplate. Как я могу получить Buffered Response. Мы НЕ МОЖЕМ использовать BufferingClientHttpResponseWrapper
, как показано ниже в моем коде, поскольку это не открытый класс. Есть ли другой способ сделать это? Я знаю, что для HttpComponent AsyncHttpClient доступен проводной журнал. Но он будет иметь все журналы из всех AsyncResttemplates в целом приложении. Если мы хотим захватить журналы только для одного шаблона, то Interceptor - единственный способ, который я думаю. Пожалуйста, предложите, есть ли другой доступный вариант.Как использовать BufferingClientHttpResponseWrapper с HttpComponentsAsyncClientHttpRequestFactory
public class AsyncRestReqResInterceptor implements AsyncClientHttpRequestInterceptor {
private static final XLogger REQ_RES_LOGGER = XLoggerFactory.getXLogger("myLogger");
@Override
public ListenableFuture<ClientHttpResponse> intercept(HttpRequest request, byte[] body, AsyncClientHttpRequestExecution execution) throws IOException {
String requestPath = request.getURI().getPath();
REQ_RES_LOGGER.debug(request.getMethod()+" "+requestPath);
String requestBody = new String(body);
REQ_RES_LOGGER.debug(requestBody);
ListenableFuture<ClientHttpResponse> listenableFuture = execution.executeAsync(request, body);
ListenableFutureAdapter<ClientHttpResponse,ClientHttpResponse> futureAdapter=
new ListenableFutureAdapter<ClientHttpResponse, ClientHttpResponse>(listenableFuture) {
@Override
protected ClientHttpResponse adapt(ClientHttpResponse adapteeResult) throws ExecutionException {
return logResponseBody(adapteeResult);
}
};
return futureAdapter;
}
private ClientHttpResponse logResponseBody(ClientHttpResponse response,boolean isImageInResponse){
try {
BufferingClientHttpResponseWrapper responseWrapper = new BufferingClientHttpResponseWrapper(response);
REQ_RES_LOGGER.debug("Response Status Code :" + responseWrapper.getStatusCode().value());
REQ_RES_LOGGER.debug("Response Status Text :" + responseWrapper.getStatusText());
if (response != null && response.getBody() != null) {
String responseXml = IOUtils.toString(responseWrapper.getBody(), Charset.defaultCharset());
REQ_RES_LOGGER.debug(responseXml);
} else {
REQ_RES_LOGGER.debug("Empty Response Body");
}
return responseWrapper;
}catch (IOException io){
REQ_RES_LOGGER.error("Unexpected Error ",io);
return response;
}
}
}