问题原因:
在使用springboot restTemplate调用服务时,返回数据类型是LinkedHashMap<String,ArrayList<LinkedHashMap>>,需要将ArrayList<LinkedHashMap>转化成ArrayList<Cmpmanifest>。
而直接将 LinkedHashMap强转 Cmpmanifest 会出现类型转换异常。
解决办法:
1.遍历map
根据key获取value,遍历取值。这样做太傻了,不可取。
2.引入net.sf.json的jar包,使用特定api进行转换。
//把 ArrayList<LinkedHashMap> 转化成 JSONArray,数组元素是JSONObject
JSONArray jsonArray=JSONArray.fromObject(datas.get("cmpmanifestList"));
//把JSONArray转化成对象数组。
rpcResult.cmpmanifestList = (List<Cmpmanifest>) JSONArray.toCollection(jsonArray, Cmpmanifest.class);
注意:Cmpmanifest对象的构造函数必须是默认的无参构造函数。对象中没有的字段都是 null。
HashMap与JSONObject的转换见链接:https://www.cnblogs.com/z360519549/p/11385118.html
net.sf.json依赖的引入
gradle:
compile 'net.sf.json-lib:json-lib:2.4:jdk15'
maven:
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier> //此处要加上jdk版本号
</dependency>
这个版本号只能是15,不能是其他,我自己的JDK是1.8的。