【发布时间】:2018-09-27 12:56:47
【问题描述】:
我设置了多个 ClientHttpRequestInterceptor 作为我的 RestTemplate (CommonRestTemplateBuilder) 的常用配置,其中一个是 LogRequestInterceptor。
问题是当我在一个新的@Configuration 中添加一个新的 ClientHttpRequestInterceptor 时,我使用 commonRestTemplateBuilder 作为基础创建另一个 RestTemplate,用于记录的拦截器在新的拦截器之前执行。
这里的问题是新的拦截器添加了没有反映在日志中的标头。
是否可以给拦截器一个命令?
这是代码:
/**
* Configures the common rest template builder for building {@link RestTemplate}
*/
@Bean
public RestTemplateBuilder commonRestTemplateBuilder(HttpClient httpClient) {
return new RestTemplateBuilder()
.requestFactory(() -> {
//Use Apache Http Client request factory
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
//Use the apache caching http client
requestFactory.setHttpClient(httpClient);
//Use buffering client for debugging (get the body of the request)
return new BufferingClientHttpRequestFactory(requestFactory);
})
.customizers()
.interceptors(
//For adding common headers
new AddCommonsHeadersRequestInterceptor(),
//For logging the requests
new LogRequestInterceptor());
}
然后在另一个班级:
/**
* Configures the {@link RestTemplate} for {@link CompanyAClient}
* using as a base the {@link CommonRestTemplateConfiguration}.
*/
@Bean
public RestTemplate companyARestTemplate() {
return commonRestTemplateBuilder
.rootUri("http://companyA.com/api")
.additionalInterceptors(new AddCompanyAHeadersRequestInterceptor())
.build();
}
非常感谢。
【问题讨论】:
标签: java spring spring-boot resttemplate