如何使用AsyncRestTemplate拦截AsyncClientHttpRequest?

时间:2014-10-03 09:41:26

标签: java spring

我正在使用spring AsyncRestTemplate帮助程序类开发异步REST客户端。

客户端需要在每个请求的标头中发送令牌。

使用HttpAsyncClienthttp://hc.apache.org/httpcomponents-asyncclient-4.0.x/index.html)作为其余模板的基础http客户端时,可以添加拦截器:

HttpRequestInterceptor interceptor = (request, context) -> request.addHeader("token", "value");

CloseableHttpAsyncClient client = HttpAsyncClients.custom()
  .addInterceptorLast(interceptor)
  .build();

HttpComponentsAsyncClientHttpRequestFactory factory = new HttpComponentsAsyncClientHttpRequestFactory(client);

AsyncRestTemplate template = new AsyncRestTemplate(factory);

但是,如果由于某种原因我需要更改底层客户端,则无法再使用此拦截器。

有没有其他方法可以使用基础http客户端的拦截器不可知来拦截AsyncClientHttpRequest

1 个答案:

答案 0 :(得分:0)

不,不是通过AsyncRestTemplate而不通过HttpAsyncClient。这两个接口都没有提供用于添加HttpRequestInterceptor实例的mutator。

据我所知,只有这些的建设者是可变的。因此,即使您可以获得请求工厂或客户端,您仍然无法更改它们。

您必须拦截他们的实际创作,这取决于您的设置,可能无法实现。