返回顶部
首页 > 资讯 > 精选 >使用Feign远程调用时序列化对象失败怎么解决
  • 839
分享到

使用Feign远程调用时序列化对象失败怎么解决

2023-06-20 14:06:29 839人浏览 泡泡鱼
摘要

本篇内容介绍了“使用Feign远程调用时序列化对象失败怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Feign远程调用序列化对象失败

本篇内容介绍了“使用Feign远程调用时序列化对象失败怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Feign远程调用序列化对象失败

最近在搭建一个SpringCloud微服务时,遇到了一个问题,在使用Feign远程调用时报错,返回对象没有无参构造方法,有其他的含参数的构造方法。

本地自己搭建的微服务目录大概如下,才刚开始,后续会逐渐补充优化迭代,有兴趣的可以fork下地址:

https://GitHub.com/zhanghailang123/MyCloud

给与指导意见。

  • Eureka:注册中心服务端,采用Eureka注册中心

  • EurekaClientA:其中的一个Eureka服务端,命名有点随意,相当于一个数据提供中心,暂时没有使用ORM框架对接数据库,把相应数据写死了,目前只是在练习使用为了方便,后续考虑使用springJPA,因为Mb用的太多了

  • FeignZ:feign模块远程调用加负载均衡,而且整合了Hystrix熔断机制,当然目前只做了最简单的Demo,练习下手感

  • HystrixDashboard :Hystrix仪表盘,可以关注下当前的服务器状况

使用Feign远程调用时序列化对象失败怎么解决

  • RibbonZ:主要用作于负载均衡,启动时可以启动EurekaClientA 多次指定不同的端口号,来测试下负载均衡,一般都是用Feign直接远程调用,内置了ribbon,这个demo中也是为了测试用的。

  • TurBineZ:用来监控集群的熔断情况。

  • ZuulZ:网关

使用Feign远程调用时序列化对象失败怎么解决

接下来进入正题。

场景: 在使用Feign远程调用写死的数据服务EurekaClientA时,报错如下

feign模块如下:

使用Feign远程调用时序列化对象失败怎么解决

此处为了复现问题,将熔断逻辑暂时注释掉

使用Feign远程调用时序列化对象失败怎么解决

此处报错信息:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.example.pojo.Student` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

报错的对象 :org.example.pojo.Student 如下,一个很简单的bean对象:

使用Feign远程调用时序列化对象失败怎么解决

那为什么会报这个问题呢 :不存在无参构造函数,序列化失败

带着疑问走进报错的地方:

使用Feign远程调用时序列化对象失败怎么解决

可以看到是这个地方 canInstantiate()方法校验没通过。在此处打个断点一探究竟

使用Feign远程调用时序列化对象失败怎么解决

这个校验里面内容是:

使用Feign远程调用时序列化对象失败怎么解决

总之都是校验无参构造函数。如果给调用的student对象加上无参构造函数就可以成功调用。

使用Feign远程调用时序列化对象失败怎么解决

构造函数就可以成功调用。**

问题倒不是什么大问题,在搭建服务过程中,只有亲力亲为,切实参与到了,才能感受到各种奇奇怪怪的小问题,也只有这样自己亲自动手,才是收获最大的。

Feign做远程调用的注意点

在使用feign的过程中遇到了一些问题,所以在这里做以下总结

1.定义的做远程调用的api接口

中的方法参数列表中的参数都必须都要打上@RequestParam(“value”) 注解**,否则调用会报405异常,这一点是和controller中不一样的,controller中的方法只要参数名和前台传入的参数键名对应上就能自动绑定上参数

复杂类型用必须打上@RequestBody注解

2.service微服务中的Controller的参数绑定

如果参数列表中有复杂类型,请使用Post请求,使用Get请求会报Bad Request错误,且需要打上@RequestBody注解,而普通基本类型可以不用打上@RequestParam注解可自动绑定参数

如有其它问题,也欢迎补充,放一下代码:

api:

@FeignClient("MS-ADMIN-SERVICE")public interface FixFeignService {    @GetMapping("/fix")    public List<FixInfo> findAll();    @PostMapping("/fix/add")    public int insert(@RequestBody FixInfo fixInfo);    @PostMapping("/fix/limitByParam")    public LayUIPageBean limitByParam(@RequestBody FixInfo fixInfo, @RequestParam("page") Integer page, @RequestParam("limit") Integer limit);    @PostMapping("/fix/delByIds")    public boolean delByIds(@RequestParam("ids[]") Long[] ids);    @GetMapping("/fix/findById")    public FixInfo findById(@RequestParam("id") Long id);    @PostMapping("/fix/update")    boolean update(@RequestBody FixInfo fixInfo);}

service微服务

@RestController@RequestMapping("/fix")@Slf4jpublic class FixInfoController {    @Autowired    private FixInfoService fixInfoService;    @GetMapping("")    public List<FixInfo> findAll(){        List<FixInfo> all = fixInfoService.findAll();        return all;    }    @PostMapping("/add")    public int insert(@RequestBody FixInfo fixInfo){        return fixInfoService.insert(fixInfo);    }    @PostMapping("/limitByParam")    public LayUIPageBean limitByParam(@RequestBody FixInfo fixInfo,Integer page,Integer limit){        LayUIPageBean layUIPageBean = new LayUIPageBean();        PageHelper.startPage(page,limit);        List<FixInfo> all = fixInfoService.findByParam(fixInfo);        PageInfo<FixInfo> pageInfo = new PageInfo<>(all);        return layUIPageBean.setCount((int)pageInfo.getTotal()).setData(pageInfo.getList());    }    @PostMapping("/delByIds")    public boolean delByIds(@RequestParam("ids[]") Long[] ids){        //log.info("id"+ids[0]);        boolean flag= fixInfoService.delByIds(ids);        return flag;    }    @GetMapping("/findById")    public FixInfo findById(Long id){        return fixInfoService.findById(id);    }    @PostMapping("/update")    public boolean update(@RequestBody FixInfo fixInfo){       return fixInfoService.update(fixInfo);    }}

“使用Feign远程调用时序列化对象失败怎么解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 使用Feign远程调用时序列化对象失败怎么解决

本文链接: https://lsjlt.com/news/297569.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用Feign远程调用时序列化对象失败怎么解决
    本篇内容介绍了“使用Feign远程调用时序列化对象失败怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Feign远程调用序列化对象失败...
    99+
    2023-06-20
  • 使用Feign远程调用时,序列化对象失败的解决
    Feign远程调用序列化对象失败 最近在搭建一个SpringCloud的微服务时,遇到了一个问题,在使用Feign远程调用时报错,返回对象没有无参构造方法,有其他的含参数的构造方法。...
    99+
    2024-04-02
  • 解决SpringCloud Feign传对象参数调用失败的问题
    SpringCloud Feign传对象参数调用失败 不支持GET请求方式 使用Apache HttpClient替换Feign原生httpclient @...
    99+
    2024-04-02
  • redis反序列化对象失败如何解决
    在Redis中存储的数据是经过序列化的,通常使用的是JSON、MessagePack等格式。如果反序列化对象失败,可能是因为序列化和...
    99+
    2024-04-09
    redis
  • android.uid.system调用失败怎么解决
    要解决android.uid.system调用失败的问题,可以尝试以下方法: 重启设备:尝试重新启动设备,有时候这种简单的操作就...
    99+
    2024-03-15
    android
  • json字符串反序列化失败怎么解决
    json字符串反序列化失败通常是由于以下几个原因导致的: JSON字符串格式不正确:确保JSON字符串遵循JSON格式标准,包括...
    99+
    2024-03-01
    json
  • 使用C#怎么对XML对象进行序列化和反序列化操作
    使用C#怎么对XML对象进行序列化和反序列化操作?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。public class XMLUtil{&n...
    99+
    2023-06-06
  • vb方法作用于对象失败怎么解决
    如果在使用VB方法时遇到了对象失败的错误,可以尝试以下解决方法: 检查对象是否已被正确初始化。确保已经使用New关键字或其他初始化...
    99+
    2023-10-28
    vb
  • win11开机远程调用失败如何解决
    开机远程调用失败可能由多种原因引起,以下是一些可能的解决方法:1. 确保网络连接正常:检查网络连接是否正常,确保网络连接稳定并且能够...
    99+
    2023-09-17
    win11
  • php调用webservice失败怎么解决
    这篇“php调用webservice失败怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php调用webservice...
    99+
    2023-06-26
  • Java程序在运行但接口调用失败怎么解决
    如果Java程序在运行时接口调用失败,可以尝试以下几种解决方法: 检查网络连接:确保程序可以正常访问接口所在的服务器。可以尝试通...
    99+
    2023-10-24
    Java
  • Feign远程调用参数里的内容丢失如何解决
    这篇文章主要讲解了“Feign远程调用参数里的内容丢失如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Feign远程调用参数里的内容丢失如何解决”吧!Feign远程调用参数里面内容丢失...
    99+
    2023-06-29
  • Sql Server2008远程过程调用失败的解决方法
    今天正在敲机房,清理软件提醒垃圾太多并且电脑也特别卡,我就想着既然这样就清理一下得了,结果就是:No zuo No die,SQL server数据库连接不上了。不过从另一方面来说这也是一次学习的机会,在问题中成长。问题: &nb...
    99+
    2023-05-30
    sql server 远程调用
  • Feign远程调用参数里面内容丢失的解决方案
    目录Feign远程调用参数里面内容丢失举个例子解决方法Feign远程调用细节--丢失数据同步调用异步调用Feign远程调用参数里面内容丢失 举个例子 服务A提供了如下接口(注意这里的...
    99+
    2024-04-02
  • 安装mysql远程过程调用失败怎么办
    mysql远程过程调用失败的解决方法方法一:首先,打开控制板面,在控制板面中点击进入“卸载程序”选项;进入卸载程序页面后,在程序列表中查找到“Microsoft SQL Server 2013(2012) Express LocalDB”选...
    99+
    2024-04-02
  • golang调用shell命令失败怎么解决
    如果在Golang中调用shell命令失败,可以尝试以下几种解决办法: 检查命令是否正确:确保调用的shell命令是正确的,可以...
    99+
    2023-10-26
    golang shell
  • go语言rpc调用失败怎么解决
    出现RPC调用失败的情况可能有很多原因,以下是一些常见的解决方法: 检查网络连接:首先确保客户端和服务器之间的网络连接是正常的,...
    99+
    2024-03-06
    go语言
  • 怎么用php反序列化数组和对象
    这篇文章主要讲解了“怎么用php反序列化数组和对象”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用php反序列化数组和对象”吧!1、unserialize()用于将通过 serializ...
    99+
    2023-06-20
  • Java中的对象流和序列化怎么用
    本篇内容主要讲解“Java中的对象流和序列化怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中的对象流和序列化怎么用”吧!       &nb...
    99+
    2023-06-02
  • 怎么解决php中调用time失败问题
    这篇文章主要讲解了“怎么解决php中调用time失败问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决php中调用time失败问题”吧!php中调用time失败是因为时区没有设置正确...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作