feign远程调用の解码bug

231 阅读1分钟

bug描述

A服务使用feign远程调用B服务时报错:

feign.codec.DecodeException: Error while extracting response for type [java.util.List<com.xxx.vo.xxxVo>] and content type [application/json]

解决bug

A、B两个服务中都有一个TO类,两个TO类内容是相同的,但仔细观察后发现两个TO类defaultStatus字段的类型不同,在A中为Integer,而在B中为Boolean。B封装查询结果后这个字段被赋值为Boolean类型,而A服务同样的一个字段为Integer类型无法接收true/false这样的布尔值。

image.png

做个实验,把B中此字段的类型改为Integer,A中此字段类型改为Boolean。虽然在B服务中封装的返回结果中此字段为Integer类型的1,但是1可以被A服务的Boolean类型接收,转为true

image.png

总结

有时候遇到这种问题很容易陷入配置feign序列化的漩涡,可以把其他相似的、能正常运行的代码拿来对比一下,确定不是大问题,那就是致命的小问题。