我的实际场景是springboot项目中微服务分布式,服务调用服务时返回一个自己定义的实体类,用object接受的,想转换却转换不了。
LotteryResult data = (LotteryResult )lottery.getData();
这种方式强转,虽然IDEA没有报编译错误
但是运行起来就报错了
java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class
解决方式1:
ObjectMapper objectMapper = new ObjectMapper();
LotteryResult data = objectMapper.convertValue(lottery.getData(), LotteryResult.class);
objectmapper需要导包
import com.fasterxml.jackson.databind.ObjectMapper;
LotteryResult就是我们自定义的类,
lottery.getData()是我调用服务返回的数据,用object接收的
解决方式2:
还有一种方式是用json的工具类将返回的数据转成json格式,然后在将json格式转换成对应的自定义的类,这种方法很有效,前面那种方法有时候可以但有时候不可以,我也不知道具体什么原因。
举个例子:
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(lottery.getData());
LotteryResult data = JSONUtil.toBean(json, LotteryResult.class);
objectmapper需要导包
import com.fasterxml.jackson.databind.ObjectMapper;
我导的是这个包,
如果以上方式都不行,你可以检查一下自己返回的数据与强转的自定义类是否相同,如属性名称等。