美文网首页
粗心导致的Bug总是无法避免

粗心导致的Bug总是无法避免

作者: 猿天地 | 来源:发表于2020-05-06 20:28 被阅读0次

故事背景

有个朋友在微信上问我,说Feign调用的时候服务提供方有结果,但是在调用方这边这个字段的值却丢失了,我一听感觉不可思议,如果说全部的值都没有,那有可能是报错了之类的情况。

但是某一个字段的值不见了,这种情况还真没遇到过。下图就是调用方的获取的信息,nickname值丢了。

图片

Feign内部排查数据是否取到

如果服务提供方有值并且返回了,那么唯一的问题就是出在Feign的内部了,怀疑跟内部解码有关系,只能调试代码才可以找出问题。

在org.springframework.cloud.openfeign.support.SpringDecoder类中的decode方法里查看数据解码之后到底有没有丢失,发现确实已经不存在了。

图片

既然解码后就不在了,那么解码之前呢?

通过下面的代码看看解码之前的数据到底有没有丢失:

IoUtils.toString(new FeignResponseAdapter(response).getBody(), "utf-8")
图片

到这里基本上这个问题的原因就找到了,从服务端获取的数据肯定没问题,我们也看到确实是存在的,然后一解码就没了。

解码排查

但是解码也没什么特别的呀,就是用HttpMessageConverter进行数据转换。最底层就是ObjectMapper将字符串转成对象而已,只能看看Json转换哪里有没有问题。

最后在com.fasterxml.jackson.databind.deser.BeanDeserializer#deserializeFromObject找到了问题,nickname这个字段找不到,估计是被忽略了。

图片

然后打开对应的实体类,发现字段上面加了 @JsonIgnore 我的天。。。如果一开始就去看看接收的实体类那么直接就能发现这个问题了,刚开始也没想到会是这样,不过从框架的源码中去一步步发现问题会更有意思,也符合一步步排坑的逻辑。

关于作者:尹吉欢,简单的技术爱好者,《Spring Cloud微服务-全栈技术与案例解析》, 《Spring Cloud微服务 入门 实战与进阶》作者, 公众号 猿天地 发起人。

相关文章

  • 粗心导致的Bug总是无法避免

    故事背景 有个朋友在微信上问我,说Feign调用的时候服务提供方有结果,但是在调用方这边这个字段的值却丢失了,我一...

  • 正视Bug

    经常会因为一些小细节,不仔细,粗心,或技术细节点的不知导致bug的产生。虽说,coding代码不可能不产生bug。...

  • 如何快速定位、分析、解决非Crash的BUG(iOS 11篇)

    前言 众所周知,Bug是线上应用极力规避但又无法避免的。对于致命的Bug,我们可以通过Crash日志进行分析;对于...

  • 如何快速定位、分析、解决非Crash的BUG(iOS 11篇)

    前言 众所周知,Bug是线上应用极力规避但又无法避免的。对于致命的Bug,我们可以通过Crash日志进行分析;对于...

  • iOS数组防止越界crash

    有时候项目中总是出现一些无法预知的情况,导致数组越界是程序crash,如果这种意外情况无法避免,那么只能从侧面采取...

  • 2019-10-30

    {"id":31,"info":"修复京东价格过滤导致无法缓存bug。","isDelete":1,"isForc...

  • windows使用celery无法连接到amqp服务器

    这是由于一个bug导致,某个python包版本过低,导致无法celery无法正常连接amqp,一般更新所有的pip...

  • 粗心导致错乱

    今天上午我想到领导安排的征文还没有着落,按照规定交付日期马上就到了。于是,我第一要务构思成文。 第二节召开教研组的...

  • 如何编写可升级合约

    以太坊智能合约部署到链上就无法在修改,这样就导致链上合约bug无法修复只能修复bug后重新部署一份合约,替换原来的...

  • 2022年5月30日《孩子专注力不够怎么办》

    一、感受 很多孩子在学习和生活中,经常会出现粗心的毛病。尤其是在考试中,经常会因粗心导致无法获得满分,明明会的题目...

网友评论

      本文标题:粗心导致的Bug总是无法避免

      本文链接:https://www.haomeiwen.com/subject/xssgghtx.html