异常描述及复现
FdcpRes对象里有一个List属性。首先把FdcpRes对象变为JSON字符串,然后在把JSON字符串变为FdcpRes对象,此时再获取List属性并且强转,就会报错。
报错为:java.util.LinkedHashMap cannot be cast to
解决办法
从json字符串转换为FdcpRes的对象中已经没有了泛型,所以可以把这个FdcpRes里的data字段变为字符串重新反序列化
package json2objerror; import untils.JsonUtils; import java.util.ArrayList; import java.util.List; /** * @author chaird * @create 2022-04-17 13:11 */ public class MainOk { public static void main(String[] args) { FdcpRes res = buildRes(); // 创建JSON字符串 String s = JsonUtils.objectToJson(res); FdcpRes fdcpRes = JsonUtils.jsonToPojo(s, FdcpRes.class); //把List对象里重新变为Json字符串,再重新把Json字符串变为List对象就Ok了 s = JsonUtils.objectToJson(fdcpRes.getData()); List<Ecodata> data = JsonUtils.jsonToList(s, Ecodata.class); for (Ecodata datum : data) { System.out.println(datum); } } public static FdcpRes buildRes(){ // 创建两个对象 List<Ecodata> ecodataList = new ArrayList<>(); Ecodata e1 = new Ecodata(); e1.setId(1); e1.setValue(1D); ecodataList.add(e1); Ecodata e2 = new Ecodata(); e2.setId(2); e2.setValue(2D); ecodataList.add(e2); // 封装结果 FdcpRes res = new FdcpRes(); res.setCode(200); res.setData(ecodataList); return res; } }
源码下载
https://gitee.com/cbeann/Demooo/tree/master/java-demoo/src/main/java/json2objerror