Feign 请求拦截器自动补标准前缀

zjc 于 2026-08-19 发布

共享 Feign 契约里写 /user/{id},下游真实路径却是 /api/v1/provider/user/{id}。如果靠每个调用方手写完整前缀,服务名和模块名一变就要改契约。项目用 Feign RequestInterceptor 在发送前自动补前缀。

一、识别目标服务

拦截器从 request.feignTarget() 读取目标服务名,例如:

service-provider

然后用同一套规则推导目标服务前缀:

/api/v1/provider

二、根据方法版本选择前缀

Feign 方法可以标注 @ApiVersion。没有标注时使用默认版本。这样调用 v2 接口时,会补 /api/v2/...,而不是继续沿用默认版本。

三、避免重复拼接

如果请求路径已经是标准前缀,拦截器不会再次追加。这个判断看似简单,却能避免接口升级过程中新旧写法混用时出现双重前缀。

四、契约和路由使用同源规则

公共模块里的 ApiPathResolver 同时服务 MVC 前缀、SpringDoc 分组和 Feign 拦截器。规则只有一份,出错的概率自然低。

五、经验总结

这个设计让 Feign 契约保持资源级简洁,同时让实际请求符合全局路由规范。调用方不需要理解网关路径拼接细节。