FeignClient中GetMapping传JSON数组参数被错误拆分如何解决
问题根因
直接将查询参数硬拼接在@GetMapping的value属性中时,Feign的路径解析逻辑会将查询串里的逗号识别为多值参数的分隔符,自动把原本完整的fields参数值拆分为两段,最终生成两个同名的fields查询参数,就是你调试看到的错误地址格式,自然无法满足外部接口的JSON格式要求。
可行解决方案
不要把查询参数硬写在映射路径里,使用Feign标准的参数绑定方式即可,根据你的使用场景选下面任意一种写法:
- 固定传值场景:如果
fields的取值是固定的,直接通过@RequestParam的defaultValue设置参数值,Feign会自动对整个参数值做正确的URL编码,不会拆分逗号
@GetMapping("/path/to/endpoint") public String hitEndpoint( @RequestParam(value = "fields", defaultValue = "[\"nm\",\"label\"]") String fields ) {}
- 动态传值场景:如果
fields的取值需要动态调整,显式声明请求参数,调用方法时传入符合JSON格式的字符串即可
@GetMapping("/path/to/endpoint") public String hitEndpoint(@RequestParam("fields") String fields) {} // 业务代码中调用示例 String result = hitEndpoint("[\"nm\",\"label\"]");
避坑提示:不要尝试在路径里手动把逗号转义为
%2C,多数版本的Feign会对路径中的内容做二次URL编码,最终转成%252C,反而引发新的参数格式错误。
内容的提问来源于stack exchange,提问作者bkqdad
相关产品推荐
相关产品推荐

