运维开发网

由于过多的假参数导致调用失败的解决方案

运维开发网 https://www.qedev.com 2022-10-26 19:04 出处:网络
feign参数过多调用失败 错误信息 JSON分析错误:非法字符((CTRL-CHAR,code 31)):token shellip之间只允许常规空格(\\r,\\n,\\t)。


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

以上个人经验,希望能给你一个参考

0

上一篇:

没有了:下一篇

精彩评论

暂无评论...
验证码 换一张
取 消