You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ClientHttpRequestInterceptor的intercept方法调用顺序及与连接池取连接先后问询

ClientHttpRequestInterceptor 常见问题解答

1. intercept方法的调用顺序

ClientHttpRequestInterceptor的执行顺序和你向RestTemplate注册拦截器的顺序完全一致:

  • 你可以通过RestTemplate.setInterceptors(List<ClientHttpRequestInterceptor> interceptors)方法传入自定义拦截器列表,列表中排序越靠前的拦截器,越先执行intercept方法
  • 请求处理阶段的执行顺序是:先注册的拦截器先执行,所有拦截器都执行完成后才会发起实际请求
  • 响应处理阶段的执行顺序和请求阶段相反:后注册的拦截器会先处理响应结果,再逐层回传给先注册的拦截器

2. intercept方法的调用时机

intercept方法的调用是在RestTemplate从连接池获取连接之前,完整的执行链路顺序如下:

  1. 业务代码调用RestTemplate的请求方法(如getForObject、exchange等)
  2. 按注册顺序依次执行所有ClientHttpRequestInterceptor的intercept方法,可在此阶段修改请求头、请求参数、打印请求日志,或是直接返回自定义响应终止请求链路
  3. 所有拦截器请求预处理完成后,才会进入实际HTTP请求执行逻辑:包括从连接池获取空闲连接、建立TCP连接(无可用空闲连接时)、发送请求报文、接收服务端响应
  4. 按注册逆序依次执行所有拦截器的响应处理逻辑
  5. 最终将处理后的响应返回给业务代码

这种设计的核心目的是避免连接资源浪费:如果拦截器预处理阶段就判定请求非法、或是触发限流降级规则,可直接返回结果,无需占用连接池的连接资源。

内容的提问来源于stack exchange,提问作者Arpit Tomar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:24:01