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

Feign调用含逗号、方括号URL时参数被拆分 如何禁用URL重写

问题根源

该异常并非Feign的URL重写逻辑导致,核心原因是Spring MVC解析@GetMapping注解内的路径片段时,默认将逗号识别为查询参数分隔符,会自动将路径中逗号前后的内容拆分为多个同名查询参数,最终生成格式错误的请求。

可行解决方案

无需全局禁用Feign的URL处理逻辑,选择以下任意一种写法即可解决参数拆分问题:

  • 方式一:不要将查询参数硬编码在注解的value属性中,通过@RequestParam注解显式声明查询参数,Feign会自动对参数值做合规编码,不会出现错误拆分。
    代码示例:

@FeignClient(name="FinancialTimesFeignClient", url="https://markets.ft.com/data/equities/ajax/updateScreenerResults")
public interface FinancialTimesClient {
@GetMapping
FinancialTimesDto getTickers(@RequestParam("data") String dataValue);
}

调用接口时,直接传入`"[a,b]"`作为`dataValue`的实参即可。
- 方式二:如果需要固定查询参数值、不想在调用时传参,将路径中的特殊字符做URL编码后再写入`value`属性即可,逗号对应的URL编码为`%2C`,修改后的注解写法如下:
```java
@GetMapping(value = "?data=[a%2Cb]")

这种写法下解析器不会将编码后的逗号识别为参数分隔符,最终生成的请求路径与预期完全一致。

  • 方式三:在接口方法中传入原生URI类型参数,Feign会直接使用传入的URI发起请求,完全跳过注解路径的解析拆分逻辑,适合参数固定、包含大量特殊字符的场景:

@FeignClient(name = "FinancialTimesFeignClient")
public interface FinancialTimesClient {
@GetMapping
FinancialTimesDto getTickers(URI requestUri);
}

调用时直接构造完整URI传入即可:`new URI("https://markets.ft.com/data/equities/ajax/updateScreenerResults?data=[a,b]")`

---
内容的提问来源于stack exchange,提问作者Samuel
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 08:45:32