Feign 调用常见问题避坑指南!
↓推荐关注↓
转自:juejin.cn/post/7132495545884639240
1.写在前面
很多时候,我们在使用微服务框架的时候,就基本上少不了与feign打交道。
毕竟服务之间的调用,基本上都不会用http调了,这样显得有点麻烦了,feign更方便了。
而且feign,还自带了负载均衡的策略(ribbon提供),如果我们的服务是集群的,feign还能负载调用。
这些估计大家都懂吧?不会还有人不懂吧?那这个要深入学习了。哈哈
在用feign的日常中,难免会遇到些问题,那下面,我来总结下,我在项目开发中遇到的问题喽。
哈哈,虽说不是大问题,但至少是点经验分享喽,希望可以帮助到大家。
好啦,下面开始喽!!!

2. FEIGN 常见问题
2.1 400 Bad Request 问题
2.1.1 问题描述
在使用feign调用的使用出现400 Bad request的问题。
2.1.2 代码如下
@PostMapping("/llsydn/getMenusByIdsAndTypes")
List<SysMenuDto>?getMenusByIdsAndTypes(@RequestParam("menuIds")?String?menuIds,
???????????????????????????????????????@RequestParam("menuType")?String?menuType);
这个 menuIds 数量比较多,导致400 错误。发现问题出在menuIds 跟在URL后面。
2.1.3 解决办法
将方法修改为:
@PostMapping("/llsydn/getMenusByIdsAndTypes")
List<SysMenuDto>?getMenusByIdsAndTypes(@RequestBody?MultiValueMap<String,String>?queryParam);
调用方法修改成:
public?List<SysMenuDto>?getMenusByIdsAndNotType(String?menuIds,?String?menuType){
????MultiValueMap?valueMap=new?LinkedMultiValueMap();
????valueMap.add("menuIds",menuIds);
????valueMap.add("menuType",menuType);
????return?systemClient.getMenusByIdsAndTypes(valueMap);
}
2.2. 非法字符错误
2.2.1 错误信息
在系统调用系统脚本的接口的时候抛出如下的错误。
Illegal?character?((CTRL-CHAR,?code?31)):?only?regular?white?space?(\r,?\n,?\t)?is?allowed?between?tokens
2.2.2 错误原因
是feign 调用的时候启用了压缩导致的。
3.2.3 解决办法
1.关闭压缩即可。

将配置改成:
feign.compression.request.enabled=false
feign.compression.response.enabled=false
2.或者使用okHttp
<dependency>
????<groupId>io.github.openfeign</groupId>
????<artifactId>feign-okhttp</artifactId>
</dependency>
2.3. 字符串中文乱码问题
2.3.1 错误信息
在Feign调用时,传到目标服务的方法中,字符串里的中文变成问号了
2.3.2 解决办法
在Feign的接口的注解中指定consumes字符集:
@PostMapping(value = "/portal/core/appdata/install",consumes = "application/json;charset=UTF-8")
void install(@RequestBody String data);
如果此时data为[{},{}]格式的JSON字符串,即JSON数组字符串,又会报参数类型不匹配的错误,要把参数改为对象数组或者List对象:
@PostMapping(value = "/portal/core/appdata/install",consumes = "application/json;charset=UTF-8")
void install(@RequestBody Object[] data);
2.4. too many Body parameters问题
2.4.1 问题描述
feign的post请求只能有一个body feign的post方法中,只能使用一个@RequestBody或者不带该注解,不能使用多个@RequestBody。
否则会报错nested exception is java.lang.IllegalStateException: Method has too many Body parameters。
2.4.2 解决办法
只保留一个@RequestBody注解
2.5. Read timed out问题
2.5.1 问题描述
feign调用超时,会出现这个问题。
一般来说当我们的业务需要处理的时间很大时,会出现这个问题。例如,上传excel文件。
那这里我们可以进行feign的超时时间设置。这里只针对指定的feign client
2.5.2 解决办法
@FeignClient(name?=?"systemClient")
public?interface?SystemClient?{
?
????@RequestMapping(path?=?"/llsydn/importExcel",?consumes?=?{"multipart/form-data"})?
????JsonResult?importExcel(@RequestPart(name="file")?MultipartFile?file);
}
yml配置
feign:
??httpclient:
????enabled:?true
??client:
????config:
??????default:
????????#默认时间设置为10s
????????ConnectTimeOut:?10000
????????ReadTimeOut:?10000
??????#调用system微服务,默认时间设置为30s
??????systemClient:
????????ConnectTimeOut:?30000
????????ReadTimeOut:?30000
好了,以上就是个人真实项目-FEIGN常见问题的分享了。
- EOF -
关注「程序员的那些事」加星标,不错过圈内事
点赞和在看就是最大的支持?
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
- 1 习近平将发表二〇二六年新年贺词 7904141
- 2 2026年国补政策来了 7808738
- 3 东部战区:开火!开火!全部命中! 7712893
- 4 2026年这些民生政策将惠及百姓 7616985
- 5 小学食堂米线过期2.5小时被罚5万 7519709
- 6 解放军喊话驱离台军 原声曝光 7428214
- 7 为博流量直播踩烈士陵墓?绝不姑息 7327605
- 8 每月最高800元!多地发放养老消费券 7238391
- 9 数字人民币升级 1月1日起将计付利息 7141831
- 10 2026年1月1日起 一批新规将施行 7040675








程序员的那些事
