Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在RestTemplate(Spring)中最后执行ClientHttpRequestInterceptor_Java_Spring_Spring Boot_Resttemplate - Fatal编程技术网

Java 如何在RestTemplate(Spring)中最后执行ClientHttpRequestInterceptor

Java 如何在RestTemplate(Spring)中最后执行ClientHttpRequestInterceptor,java,spring,spring-boot,resttemplate,Java,Spring,Spring Boot,Resttemplate,我已将多个ClientHttpRequestInterceptor设置为RestTemplate(CommonRestTemplateBuilder)的公共配置,其中一个是LogRequestInterceptor 问题是,当我在一个新的@Configuration中添加一个新的ClientHttpRequestInterceptor时,我使用commonRestTemplateBuilder作为基础创建了另一个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 {
...
}