java.lang.ClassCastException异常
作者:互联网
项目中出行java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xxx(实体类)异常的原因:
参数如下:
{
"appId": 101,
"tokenId": 201,
"sign": 1,
"userId": 45,
"traineeInfo":"{\"name\":\"马继涛\",\"gender\":1,\"birth\":\"19930906\",\"idCardNo\":\"2012050614\",\"school\":\"北京第三中学\",\"contact\":\"18866666666\"}",
"relationship":"母子",
"orders": [{
"amount": 200,
"totalAmount":200,
"payMethod":2,
"isTeacherQualified":"true",
"courseCode": "51bf186450d8bc11ebb49b005056a7973c",
"orderId": 20210708006,
"merRecvInfo":"{\"merchantPayBal\":\"21343323\"}",
"teacherInfo":"{\"isTeacherCertain\":1, \"teacherName\":\"王XX\", \"isTeacherQualified\":1 }"
},
{
"amount": 300,
"totalAmount":300,
"payMethod":1,
"isTeacherQualified":"false",
"courseCode": "87f06c1211d94f11eb9c8f68545a856785",
"orderId": 20210708005,
"merRecvInfo":"{\"merchantPayBal\":\"1112222333\"}",
"teacherInfo":"{\"isTeacherCertain\":1, \"teacherName\":\"马XX\", \"isTeacherQualified\":0 }"
}
]
}
后端如果用BeanUtils.populate(contractInfo, body);
会导致orders内部结构是List<LinkedHashMap>
而不是List,遇到这种情况,不要着急,我们不是拿不到它的值,而是跟我们预期的不太理想,那我们就想办法让它达到预期的效果,就要用到fastjson来处理了。
List<OrderDo> orderDos = JSON.parseArray(JSON.toJSONString(contractInfo.getOrders()), OrderDo.class);
contractInfo.setOrders(orderDos);
JSON、java对象、list之间的相互转换
1:pom引入
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.44</version>
</dependency>
2 常见转换
//1. List<Map<String, String>> list 转 JSONArray
JSONArray jsonArray = JSONArray.parseArray(JSONObject.toJSONString(list)); /**list为 List<Map<String, String>>**/
//2.JSON 转成List
List<ChannelItem> channelItemList = JSON.parseArray(itemJson,ChannelItem.class); /** itemJson: JsonArray ChannelItem : 对象bean类**/
//3. Map<String, String> 转 JSON
JSONObject itemJSONObj = JSONObject.parseObject(JSON.toJSONString(itemMap)); /** itemMap 为 Map<String, String>**/
//4.JSON 转 Map<String, String>
Map<String, Object> itemMap = JSONObject.toJavaObject(itemJSONObj, Map.class); /** itemJSONObj JSONObject**/
//5. JSONObject 转 JavaBean
Student student = JSON.parseObject(JSONObjectStr, new TypeReference<Student>() {}); //因为JSONObject继承了JSON,所以这样也是可以的
//6.JSONObject 转 Map<String , String>
Map<String ,String> param = JSONObject.parseObject(jsonObject.toJSONString(), new TypeReference<Map<String, String>>(){});
json转换来自于:https://blog.csdn.net/sinat_35626559/article/details/78919736
标签:lang,Map,java,JSONObject,List,JSON,list,ClassCastException 来源: https://blog.csdn.net/qq_34254462/article/details/118570231