Java 如何在RestTemplate(Spring)中最后执行ClientHttpRequestInterceptor
我已将多个ClientHttpRequestInterceptor设置为RestTemplate(CommonRestTemplateBuilder)的公共配置,其中一个是LogRequestInterceptor 问题是,当我在一个新的@Configuration中添加一个新的ClientHttpRequestInterceptor时,我使用commonRestTemplateBuilder作为基础创建了另一个RestTemplate,用于日志记录的拦截器在新拦截器之前执行 这里的问题是,新的拦截器添加了未反映在日志中的头 有可能给拦截者下命令吗 代码如下:Java 如何在RestTemplate(Spring)中最后执行ClientHttpRequestInterceptor,java,spring,spring-boot,resttemplate,Java,Spring,Spring Boot,Resttemplate,我已将多个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();
}
非常感谢。当然可以。从Spring5开始,拦截器使用。在您这边,只需在拦截器上添加注释@Order或@Priority即可:
@Order(1)
public class FirstInterceptor implements ClientHttpRequestInterceptor {
...
}
@Order(2)
public class SecondInterceptor implements ClientHttpRequestInterceptor {
...
}