feign参数过多调用失败
错误信息
JSON分析错误:非法字符((CTRL-CHAR,code 31)):token shellip之间只允许常规空格(\r,\n,\t)。
当通过feign调用其他服务时,会报告上述错误。传入参数少的时候没有错误,传入参数多的时候会自动取hystrix fuse。
通过层层调查
报这个错误的原因是因为
解析JSON时出错:非法字符((CTRL-CHAR,代码31)):标记之间只允许常规空单元格(\r,\n,\t)。...
Json解析错误。我开始想到用一个实体类来接收对面返回的参数,所以报了这个错误。我会用一个对象来接收它。
但是结果显示还是会使用fuse,然后用map接收返回参数,还是一样的。后来百度查了一下,需要配置feign,取消压缩。
我试过了。没用。最后上百度说传输的数据是压缩的。只需添加feign的配置,移除压缩限制即可。但还是没用。无奈之下,只能咨询同事。
给出了两种解决办法
第一种是减少被叫方返回的数据(我只是用这个方法,但这个方法不是长久之计)。
第二:使用原生http请求对面的api。网上有很多工具包。
feign多参数传递踩坑记录
这真是个大日子。在网上看了很多feign的博客,都找不到基本类型和实体类的处理方法。写在这里,该死的。
场景
现在,如果有寻呼请求,前端给我们的用户端参数如下:
int类型的pageNum,表示分页页码int类型的pageSize,表示每页数据的条数实体类的相关参数
然后我们使用百里叶,所以我们需要一个模型将分页相关的参数返回到前端。
现在的问题是
我准备把pageNum,pageSize,entity class传给服务器,让他给我分页结果的相关参数。
解决方案
1.消费者控制器:
这里的参数怎么接收?
2.客户端接口的对应方法:
给两个int类型的数据加上@RequestParam给实体类加上@RequestBody
3.服务器控制器:
与假装接口方法一样
给两个int类型的数据加上@RequestParam给实体类加上@RequestBody
终于不会错了,xdm
以上个人经验,希望能给你一个参考
精彩评论