我们的应用程序正在使用RestTemplate调用其他Rest服务,它是Spring Boot应用程序。我有一些要求,我需要将属性从http标头复制到请求正文。
手动进行操作会导致许多地方的更改。我正在寻找一种通用的解决方案,即,我可以扩展RestTemplate的功能并在整个应用程序中使用它。
有什么方法可以修改RestTemplate来达到我的要求。我已经通过HttpMessageConverter经历了各种可能性,我可以附加Json Property,但是正在寻找一种可以从Header复制它的方式。
如果我不清楚自己的要求,请告诉我,任何提示都将有所帮助。
答案 0 :(得分:1)
您可以通过实现ClientHttpRequestInterceptor
来扩展RestTemplate的行为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;
}
}