使用Feign远程调用时,序列化对象失败
使用Feign远程调用时,序列化对象失败最近在搭建一个SpringCloud的微服务时,遇到了一个问题,在使用Feign远程调用时报错,返回对象没有无参构造方法,有其他的含参数的构造方法。本地自己搭建的微服务目录大概如下,才刚开始,后续会逐渐补充优化迭代,有兴趣的可以fork下地址:https://github.com/zhanghailang123/MyCloud给与指导意见。Eureka:注册
使用Feign远程调用时,序列化对象失败
最近在搭建一个SpringCloud的微服务时,遇到了一个问题,在使用Feign远程调用时报错,返回对象没有无参构造方法,有其他的含参数的构造方法。本地自己搭建的微服务目录大概如下,才刚开始,后续会逐渐补充优化迭代,有兴趣的可以fork下地址:
https://github.com/zhanghailang123/MyCloud
给与指导意见。
-
Eureka :注册中心服务端,采用Eureka注册中心
-
EurekaClientA :其中的一个Eureka服务端,命名有点随意,相当于一个数据提供中心,暂时没有使用ORM框架对接数据库,把相应数据写死了,目前只是在练习使用为了方便,后续考虑使用SpringJPA,因为Mb用的太多了
-
FeignZ :feign模块远程调用加负载均衡,而且整合了Hystrix熔断机制,当然目前只做了最简单的Demo,练习下手感
-
HystrixDashboard :Hystrix仪表盘,可以关注下当前的服务器状况
-
RibbonZ :主要用作于负载均衡,启动时可以启动EurekaClientA 多次指定不同的端口号,来测试下负载均衡,一般都是用Feign直接远程调用,内置了ribbon,这个demo中也是为了测试用的。
-
TurBineZ :用来监控集群的熔断情况。
-
ZuulZ :网关
接下来进入正题。
场景: 在使用Feign远程调用写死的数据服务EurekaClientA时,报错如下
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对象:
那为什么会报这个问题呢 :不存在无参构造函数,序列化失败
带着疑问走进报错的地方:
可以看到是这个地方 canInstantiate()方法校验没通过。在此处打个断点一探究竟
这个校验里面内容是:
总之都是校验无参构造函数。如果给调用的student对象加上无参构造函数就可以成功调用。
构造函数就可以成功调用。**
问题倒不是什么大问题,在搭建服务过程中,只有亲力亲为,切实参与到了,才能感受到各种奇奇怪怪的小问题,也只有这样自己亲自动手,才是收获最大的。
更多推荐
所有评论(0)