前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >纳尼,Spring Cloud Feign 数据竟然丢失了

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

作者头像
猿天地
发布2020-05-16 13:47:14
1.9K0
发布2020-05-16 13:47:14
举报
文章被收录于专栏:猿天地猿天地

故事背景

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

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

Feign 内部排查数据是否取到

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

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

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

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

代码语言:javascript
复制
IoUtils.toString(new FeignResponseAdapter(response).getBody(), "utf-8")

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

解码排查

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

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

图片

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

相关推荐

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 猿天地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 故事背景
  • Feign 内部排查数据是否取到
  • 解码排查
  • 相关推荐
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档