标签:不可 问题 开源 学习资料 实战 json image get 搭建
故事背景但是某一个字段的值不见了,这种情况还真没遇到过。下图就是调用方的获取的信息,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 微服务 入门 实战与进阶》作者, 公众号 猿天地 发起人。个人微信 jihuan900, 欢迎勾搭。
相关推荐
后台回复 学习资料 领取学习视频
如有收获,点个在看,诚挚感谢
尹吉欢
我不差钱啊
标签:不可 问题 开源 学习资料 实战 json image get 搭建
原文地址:https://blog.51cto.com/14888386/2515128