Преобразователь RestTemplate перестал работать, добавив перехватчик - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть приложение с начальной загрузкой 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 в требуемый объект. Я думаю, что необходима некоторая дополнительная конфигурация, чтобы объект ответа получил требуемое сопоставление, и я понятия не имею, что в этом случае отсутствует? Может ли кто-нибудь помочь, пожалуйста? Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...