java.util.LinkedHashMap cannot be cast to com.result.Page.服务间调用访问不到另一个服务的实体类的属性

在微服务架构中,遇到跨服务调用时的数据类型转换异常。具体表现为尝试将LinkedHashMap转换为自定义的Page类失败。通过反射方式解决此问题,首先将数据转换为JSON对象再反序列化为Page类实例。此外,由于实体类在不同服务间存在,无法直接调用其方法获取属性,因此使用JSONObject获取属性值。这是一个初学者在微服务环境下遇到并解决的问题。
摘要由CSDN通过智能技术生成

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.lucun.wltour.shops.api.result.Page## 标题服务间调用访问不到另一个服务的实体类的属性

Page page=pageLuJsonResult.getData();

在本服务(用户服务)调用另一个服务(商家服务)得到 pageLuJsonResult
但在getData()时报错 java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.lucun.wltour.shops.api.result.Page
解决如下

//获得page,反射方式Page需要提供无参构造方法
 Page entity = JSON.parseObject(JSON.toJSONString(pageLuJsonResult.getData()), Page.class);
 //getRows()是获得用商家服务提供的shops信息集合
 JSONArray entityRows = (JSONArray) entity.getRows();

现实中问题是shops这个bean在商家服务中,用户服务引用了shops-api,
商家服务同样引入shops-api,我们在用户服务中需要获得shops的id,显然getId()不行。

//获得JSONObject
        for(int i=0;i<entityRows.size();i++){
            JSONObject object=entityRows.getJSONObject(i);
            Integer id = (Integer) object.get("id");
        }

显然我们需要获得shops中的某个属性值直接用JSONObject.get(“属性名字”)就可以了。
这是本人遇到的问题和解决方法,因为刚上手微服务,所以我的解决方法可能并不好,欢迎路过的朋友们给出指点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值