故事背景
有个朋友在微信上问我,说 Feign 调用的时候服务提供方有结果,但是在调用方这边这个字段的值却丢失了,我一听感觉不可思议,如果说全部的值都没有,那有可能是报错了之类的情况。
但是某一个字段的值不见了,这种情况还真没遇到过。下图就是调用方的获取的信息,nickname 值丢了。
Feign 内部排查数据是否取到
如果服务提供方有值并且返回了,那么唯一的问题就是出在 Feign 的内部了,怀疑跟内部解码有关系,只能调试代码才可以找出问题。
在 org.springframework.cloud.openfeign.support.SpringDecoder 类中的 decode 方法里查看数据解码之后到底有没有丢失,发现确实已经不存在了。
既然解码后就不在了,那么解码之前呢?
通过下面的代码看看解码之前的数据到底有没有丢失:
IoUtils.toString(new FeignResponseAdapter(response).getBody(), "utf-8")