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(“属性名字”)就可以了。
这是本人遇到的问题和解决方法,因为刚上手微服务,所以我的解决方法可能并不好,欢迎路过的朋友们给出指点。
在微服务架构中,遇到跨服务调用时的数据类型转换异常。具体表现为尝试将LinkedHashMap转换为自定义的Page类失败。通过反射方式解决此问题,首先将数据转换为JSON对象再反序列化为Page类实例。此外,由于实体类在不同服务间存在,无法直接调用其方法获取属性,因此使用JSONObject获取属性值。这是一个初学者在微服务环境下遇到并解决的问题。


被折叠的 条评论
为什么被折叠?



