У меня есть приложение с начальной загрузкой 2, в котором я должен регистрировать каждый запрос и ответ, сделанные с помощью Rest Template. Например, если мне нужно позвонить в другую службу, мне нужно войти в мою базу данных. Для этого я сделал следующие изменения в Конфигурации шаблона отдыха
@Configuration
@Getter
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() {
RestTemplate template = new RestTemplate();
List<ClientHttpRequestInterceptor> interceptors = template.getInterceptors();
if (CollectionUtils.isEmpty(interceptors))
interceptors = new ArrayList<>();
interceptors.add(new RequestResponseLoggingInterceptor());
template.setInterceptors(interceptors);
return template;
}
}
И код перехватчика
public class RequestResponseLoggingInterceptor implements ClientHttpRequestInterceptor {
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
throws IOException {
ResponseLoggingRepository loggingRepository = BeanUtils.getBean(ResponseLoggingRepository.class);
ResponseLoggingEntity entity = ResponseLoggingEntity.build(request, body);
loggingRepository.save(entity);
ClientHttpResponse response = execution.execute(request, body);
ResponseLoggingEntity.build(response, entity);
loggingRepository.save(entity);
return response;
}
}
Код работает отлично, и я Я успешно могу записать ответ в БД. Проблема заключается в том, что когда я использую метод обмена шаблонами остатка, я всегда получаю нулевой объект.
ResponseObject response = restTemplate.postForObject(url, requestObject,
ResponseObject.class);
Этот объект ответа всегда нулевой, когда я тестирую. Однако, если я удаляю перехватчик из шаблона rest, я получаю правильный ответ в своем объекте.
Я дополнительно отлаживаю и проверяю внутренние преобразователи во время инициализации конфигурации шаблона rest, и я могу см. MappingJackson2HttpMessageConverter, который, по моему пониманию, является тем, который преобразует ответ из JSON в требуемый объект. Я думаю, что необходима некоторая дополнительная конфигурация, чтобы объект ответа получил требуемое сопоставление, и я понятия не имею, что в этом случае отсутствует? Может ли кто-нибудь помочь, пожалуйста? Спасибо.