Java 如何让ClientHttpRequestInterceptor工作?

Java 如何让ClientHttpRequestInterceptor工作?,java,spring,spring-boot,resttemplate,Java,Spring,Spring Boot,Resttemplate,我正在尝试让ClientHttpRequestInterceptor在以下情况下工作。问题是clienthtprequestinterceptor从未被调用 我对HandlerInterceptor和HandlerInterceptorAdapter拦截器也有类似的问题。问题是我需要添加一个监听器,我发现99%的文章没有提到 @Configuration public class ListenerConfig implements WebApplicationInitializer {

我正在尝试让ClientHttpRequestInterceptor在以下情况下工作。问题是clienthtprequestinterceptor从未被调用

我对HandlerInterceptor和HandlerInterceptorAdapter拦截器也有类似的问题。问题是我需要添加一个监听器,我发现99%的文章没有提到

@Configuration
public class ListenerConfig implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext sc) throws ServletException {
        sc.addListener(new RequestContextListener());
    }
}
我猜Spring已经发生了一些变化,默认情况下侦听器不在那里

有人知道ClientHttpRequestInterceptor的听众吗

拦截器:

public class LoggingInterceptor implements ClientHttpRequestInterceptor {

    static Logger LOGGER = LoggerFactory.getLogger(LoggingInterceptor.class);

    @Override
    public ClientHttpResponse intercept(
            HttpRequest req, byte[] reqBody, ClientHttpRequestExecution ex) throws IOException {
        LOGGER.debug("Request body: {}", new String(reqBody, StandardCharsets.UTF_8));
        ClientHttpResponse response = ex.execute(req, reqBody);
        InputStreamReader isr = new InputStreamReader(
          response.getBody(), StandardCharsets.UTF_8);
        String body = new BufferedReader(isr).lines()
            .collect(Collectors.joining("\n"));
        LOGGER.debug("Response body: {}", body);
        return response;
    }
}
RestClientConfig:

@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 LoggingInterceptor());
        restTemplate.setInterceptors(interceptors);
        return restTemplate;
    }
}
@配置
公共类RestClientConfig{
@豆子
公共RestTemplate RestTemplate(){
RestTemplate RestTemplate=新RestTemplate();
列出拦截器
=restTemplate.getInterceptors();
if(CollectionUtils.isEmpty(拦截器)){
拦截器=新的ArrayList();
}
添加(新的LoggingInterceptor());
restTemplate.setInterceptors(拦截器);
返回REST模板;
}
}

这可能与。

Spring RestTemplate拦截器有关,它只在客户端(使用者)或测试中工作,其中测试充当客户端,您有一个
RestTemplate
。我正在尝试登录服务器(生产者)端。因此,无需使用
RestTemplate

Bealdung.com上的Loredana很好地给我发了一封电子邮件,指出我有一个误解

我在某个地方找到了Spring,它使用
RestTemplate
在Rest控制器中自动解码和编码POJO。这是不正确的


@Tashkhishi还指出commets中缺少一个
RestTempale

Spring RestTemplate拦截器,仅在客户端(消费者)或测试中工作,其中测试充当客户端,您有一个
RestTemplate
。我正在尝试登录服务器(生产者)端。因此,无需使用
RestTemplate

Bealdung.com上的Loredana很好地给我发了一封电子邮件,指出我有一个误解

我在某个地方找到了Spring,它使用
RestTemplate
在Rest控制器中自动解码和编码POJO。这是不正确的


@Tashkhishi还指出commets中缺少一个
RestTempale

如果你的
RestTemplate
工作正常,但拦截器没有添加,请把你使用
RestTemplate
的代码部分放进去。这是一个简单的REST服务。没有
RestTemplate
代码,只有带有
@RestController
注释的控制器。在映射方法中使用
@RequestBody
的,应该调用
restemplate
。控制器工作正常。您的控制器中有
@Autowired
吗?是的,对于服务,控制器调用
@Autowired
。该服务构建了一个自定义响应模型,控制器返回该模型,Spring将其转换为响应的JSON主体。如果您的
RestTemplate
工作正常,但没有添加拦截器,请将使用
RestTemplate
的代码部分放入其中。这是一个简单的REST服务。没有
RestTemplate
代码,只有带有
@RestController
注释的控制器。在映射方法中使用
@RequestBody
的,应该调用
restemplate
。控制器工作正常。您的控制器中有
@Autowired
吗?是的,对于服务,控制器调用
@Autowired
。该服务构建一个自定义响应模型,控制器返回该模型,Spring将其转换为响应的JSON主体。