Spring RestTemplate Скопировать свойство HttpHeader в RequestBody - PullRequest
0 голосов
/ 25 октября 2018

Наше приложение вызывает другую службу отдыха, используя RestTemplate, приложение Spring Boot.У меня есть некоторые требования, когда мне нужно скопировать свойство из заголовка http в тело запроса.

Выполнение этого вручную приведет к изменениям во многих местах.Я ищу универсальное решение, т. Е. Я мог бы расширить функциональность RestTemplate и использовать его во всем приложении.

Есть ли способ изменить RestTemplate для достижения моих требований.Я уже рассмотрел возможности через HttpMessageConverter, я могу добавить свойство Json, но ищу способ, где его можно скопировать из заголовка.

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

1 Ответ

0 голосов
/ 25 октября 2018

Вы можете расширить поведение RestTemplate путем реализации ClientHttpRequestInterceptor

public class RestTemplateHeaderModifierInterceptor
  implements ClientHttpRequestInterceptor {

    @Override
    public ClientHttpResponse intercept(
      HttpRequest request, 
      byte[] body, 
      ClientHttpRequestExecution execution) throws IOException {

        ClientHttpResponse response = execution.execute(request, body);
        response.getHeaders().add("Foo", "bar");
        return response;
    }
}

@Configuration
public class RestClientConfig {

    @Bean
    public RestTemplate restTemplate() {
        RestTemplate restTemplate = new RestTemplate();

        List<ClientHttpRequestInterceptor> interceptors
          = restTemplate.getInterceptors();
        if (CollectionUtils.isEmpty(interceptors)) {
            interceptors = new ArrayList<>();
        }
        interceptors.add(new RestTemplateHeaderModifierInterceptor());
        restTemplate.setInterceptors(interceptors);
        return restTemplate;
    }
}

Ссылка

...