专栏首页猿天地纳尼,Spring Cloud Feign 数据竟然丢失了

纳尼,Spring Cloud Feign 数据竟然丢失了

故事背景

有个朋友在微信上问我,说 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 我的天。。。如果一开始就去看看接收的实体类那么直接就能发现这个问题了,刚开始也没想到会是这样,不过从框架的源码中去一步步发现问题会更有意思,也符合一步步排坑的逻辑。

相关推荐

本文分享自微信公众号 - 猿天地(cxytiandi),作者:尹吉欢

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring Cloud Sleuth Zipkin 展示追踪数据

    上篇文章我们介绍了Spring Cloud Sleuth 链路追踪, 可以在输出的log中增加唯一请求的标识以及spanid, 然后可以采用ELK来对数据做集中...

    猿天地
  • Feign上传文件

    今天给大家介绍下在Feign中如何调用文件上传接口,进行文件上传操作。 这边文章讲的Feign不是Spring Cloud Feign,是原始Feign的使用。...

    猿天地
  • Dubbo对Spring Cloud说:来老弟,我要拥抱你

    https://github.com/yinjihuan/kitty-cloud[1]

    猿天地
  • 使用VideoToolbox硬解码H.264

    前言 使用VideoToolbox硬编码H.264 在上一篇的硬编码简单介绍了H.264和VideoToolbox以及如何使用VideoToolbox硬编码从...

    落影
  • SFFAI分享 | 周龙:同步双向文本生成【附PPT与视频资料】

    基于双向编码的BERT在11项自然语言理解任务上取得了惊人的效果,而目前主流的自然语言生成任务(包括机器翻译,自动摘要等)仍然采用单向解码,即从左到右依次产生目...

    马上科普尚尚
  • 【论文阅读】EMNLP 2018 基于自适应的多轮解码机制的神经机器翻译模型

    本文介绍哈尔滨工业大学社会计算与信息检索研究中心(SCIR)录用于EMNLP 2018的论文《Adaptive Multi-Pass Decoder for N...

    zenRRan
  • vitualbox安装报错installation failed!error

    forrestlin
  • Netweaver的端口号和Spring boot内嵌的Tomcat端口

    Spring Boot will launch an embedded Tomcat instance automatically:

    Jerry Wang
  • 【Rust投稿】从零实现消息中间件(3)-SUBLIST

    上一篇中提到subject是一种Trie树,在实现的过程中发现非常琐碎,也不好讲解,因此考虑先实现一个简单版本的.具体来说就是

    MikeLoveRust
  • Make Your Octopress Easy

    写了几个shell脚本让你在Octopress上写博客更加轻松些,至少让我轻松了很多,哈哈哈。

    宅男潇涧

扫码关注云+社区

领取腾讯云代金券