记一次Feign调用报错feign.codec.DecodeException: Error while extracting response for type [java.util.List...

这篇具有很好参考价值的文章主要介绍了记一次Feign调用报错feign.codec.DecodeException: Error while extracting response for type [java.util.List...。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:

        在今天工作时,临时收到生产问题,检查发现是在本服务Feign远程调用其他服务时方法时发生的,具体报错详情,及原因和解决方法均记录在下方。

报错详情:

        feign.codec.DecodeException: Error while extracting response for type [java.util.List<Object>] and content type [application/json]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of `java.util.ArrayList<Object>` out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.ArrayList<Object>` out of START_OBJECT token
 at [Source: (PushbackInputStream); line: 1, column: 1]

 报错原因及解决方法:

        原因:调用方接收数据的类型和服务端传回的数据类型不一致。

1、经过检查代码,发现两边所用的对象数据类型完全一致,甚至使用的类是公共jar下的同一个类,很奇怪,那为什么会发生这样的转换异常呢?

2、拉取生产代码,在测试库进行测试,发现完全正常,无法复现问题,那究竟是怎么造成的,难道是环境不一致造成的?

3、由于生产环境不能操作调试,测试环境无法复现,问题开始难办了,这时开始在网上搜索是否有同样的问题,发现大多这样异常均是数据类型不一致导致的,开始根据如下问题一一排查

  1. 返回的 JSON 字符串与预期的 Java 类型不匹配。例如,JSON 中的某个字段为字符串类型,但在 Java 类型中却定义为数字类型。

  2. 返回的 JSON 字符串属性名与 Java 类型中定义的属性名不匹配。在这种情况下,Feign 无法将 JSON 字符串正确地转换为 Java 对象。

  3. Feign 默认使用 Jackson 库进行 JSON 反序列化,如果返回的 JSON 字符串格式不符合标准,就会出现反序列化错误。例如,JSON 字符串中包含注释、单引号或未使用双引号引起来的字符串等。

  4. 可能是服务消费方(A服务)和服务提供方(B服务)使用的 JSON 库版本不一致,导致反序列化失败。可以尝试使用相同版本的 JSON 库,或者在 Feign 客户端中指定使用某个特定版本的 JSON 库。

4、在检查了上述问题后均没解决,这时突然灵感乍现,JSON parse error: Cannot deserialize instance of `java.util.ArrayList<Object>` out of START_OBJECT token,这段异常提示,不能由对象转换为List,是否数据问题或者代码逻辑使被调用方返回的异常格式的对象,这时联系有生产环境查询权限的同事进行确认,发现确实存在数据问题导致被调用服务内抛出了异常,返回了异常对象最终出现JSON parse error。

到此问题已解决,处理了被调用方问题后(无法更改被调用方时,本服务应该try-catch,将可能出现的异常自定义处理),一切正常。文章来源地址https://www.toymoban.com/news/detail-849662.html

到了这里,关于记一次Feign调用报错feign.codec.DecodeException: Error while extracting response for type [java.util.List...的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微服务之间Feign调用无法解析IPage报错问题:Cannot construct instance of `com.baomidou.mybatisplus.core.metadata.IPage

    最新在做一个对外提供基础信息的需求,我在A服务中写了一个分页接口,本以为很简单的我在B服务用 Feign 调用一下就可以了。 可想并没有这么简单,报错了: 从源码中我们可以看到:这里是分页,而 com.baomidou.mybatisplus.core.metadata.IPage是一个接口(interface),源代码如下: 因

    2024年04月27日
    浏览(30)
  • feign自定义第三方接口;配置化Feign接口URL;调用指定IP的feign服务

    最近接手一个项目,各子工程之间通过feign调用;各服务部署在K8S上,通过nacos管理配置;由于服务部署的机器无法开放端口等原因,导致本机服务与测试环境网络端口无法互通,故需要重写feign的调用地址;个人总结的方法有以下几种: 目录  第一种:feignclient配置URL 第二种

    2024年02月04日
    浏览(52)
  • Java 【dubbo rpc改feign调用】feign接口异常统一处理

    【框架改造问题点记录,dubbo改为spring cloud alibaba】 【第一篇】feign接口异常统一处理 示例代码中【ApplicationException 】、【Payload 】为自定义异常类和通用结果返回实体类: 示例代码中【ApplicationException 】、【StringUtil】为自定义异常类和自定义工具,自己平替即可:

    2024年02月16日
    浏览(27)
  • Java 【dubbo rpc改feign调用】feign接口调用 Body parameter 4 was null

    【框架改造问题点记录,dubbo改为spring cloud alibaba】 【第四篇】feign接口调用 Body parameter 4 was null 【描述】Feign是一个声明式的Web服务客户端,它使得写HTTP客户端变得更简单。如果你在使用Feign进行服务调用时遇到了\\\"Body parameter 4 was null\\\"这样的错误,这通常意味着你尝试将一个

    2024年02月11日
    浏览(32)
  • 搭建feign远程调用环境

    在我的SpringCloud专栏中已经介绍过SpringCloud五大组件的环境搭建,各个环境的搭建都有详细的步骤讲解,之前我们说过各个服务搭建都是不依赖于之前的环境的,本节介绍的Feign服务间远程调用也是,本次也是侧重于环境搭建,Feign的作用我们之前已经介绍过了。可以查看:0

    2024年01月17日
    浏览(26)
  • postman调用feign接口

    1、同postman调用controller接口差不多,url指定为:服务地址+@FeignClient中的path+具体方法名

    2024年02月16日
    浏览(32)
  • 简化本地Feign调用

    在平常的工作中, OpenFeign 作为微服务间的调用组件使用的非常普遍,接口配合注解的调用方式突出一个简便,让我们能无需关注内部细节就能实现服务间的接口调用。 但是工作中用久了,发现 Feign 也有些使用起来麻烦的地方,下面先来看一个问题,再看看我们在工作中是如

    2024年02月09日
    浏览(19)
  • SpringCloud --- Feign远程调用

    先来看我们以前利用RestTemplate发起远程调用的代码: 存在下面的问题: 代码可读性差,编程体验不统一 参数复杂URL难以维护 Feign是一个声明式的http客户端,官方地址:GitHub - OpenFeign/feign: Feign makes writing java http clients easier 其作用就是帮助我们优雅的实现http请求的发送,解决

    2024年02月05日
    浏览(32)
  • [RPC]:Feign远程调用

    摘要:RestTemplate;Feign;远程调用; Feign是一个简化HTTP客户端编写的框架,通过声明式方式将远程服务调用封装成简单接口调用。 1.2.1 使用RestTemplate发送远程调用代码 要求:系统调用者在查询订单的同时,根据订单中包含的userId查询出用户信息,一起返回。 1.2.1.1 项目示例

    2024年02月10日
    浏览(36)
  • 【微服务】Feign远程调用

           📝个人主页: 五敷有你         🔥系列专栏: 微服务 ⛺️稳中求进,晒太阳 先来看我们以前利用RestTemplate发起远程调用的代码: 存在下面的问题: 代码可读性差,编程体验不统一 参数复杂URL难以维护 Feign是一个声明式的http客户端,官方地址:GitHub - OpenF

    2024年03月28日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包