java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xxx

1.jsp文件的方法

$("#assignPermissionBtn").click(function(){

var jsonData = new Array();

var treeObj = $.fn.zTree.getZTreeObj("treeDemo");

var checkedNodes = treeObj.getCheckedNodes(true); // 获取被选中的节点

$.each(checkedNodes,function(i,n){
jsonData.push({"roleid":"${roleId}","permissionid":n.id});
});


if(checkedNodes.length == 0){
layer.msg("请选择分配许可,至少分配一个许可!", {time:1000, icon:5, shift:6});
}else{
var loadingIndex = -1 ;
$.ajax({
type : "POST",
contentType : 'application/json;charset=utf-8', //设置请求头信息
dataType:"json",
data:JSON.stringify(jsonData),
url : "${CWF_PATH}/role/doAssignPermission.do",
beforeSend : function(){
loadingIndex = layer.msg('正在分配许可...', {icon: 16});
return true ;
},
success : function(result){

layer.close(loadingIndex);

if(result.success){
layer.msg("分配成功", {time:1000, icon:6});

}else{
layer.msg("分配失败", {time:1000, icon:5, shift:6});
}

},
error : function(){
layer.msg("操作失败!", {time:1000, icon:5, shift:6});
}
});
}
});

 2.1 java类修改前的方法(list.get(0).getRoleid()取值的时候报错)

@ResponseBody
@RequestMapping("/doAssignPermission")
public Object doAjaxDeleteRole(@RequestBody List<RolePermission> list){
AjaxResult result = new AjaxResult();
try {
roleService.addRolePermission(list.get(0).getRoleid(),list);
result.setSuccess(true);
} catch (Exception e) {
result.setSuccess(false);
result.setMessage("分配许可失败");
e.printStackTrace();
}
return result;
}

2.2java文件修改后 的方法

@ResponseBody
@RequestMapping("/doAssignPermission")
public Object doAjaxDeleteRole(@RequestBody List<RolePermission> list){
AjaxResult result = new AjaxResult();

try {

String jsonObject=JSON.toJSONString(list.get(0));
RolePermission rolePermission= JSONObject.parseObject(jsonObject,RolePermission.class);
roleService.addRolePermission(rolePermission.getRoleid(),list);
result.setSuccess(true);
} catch (Exception e) {
result.setSuccess(false);
result.setMessage("分配许可失败");
e.printStackTrace();
}
return result;
}

错误原因

程序走到doAjaxDeleteRole方法利用list.get(0).getRoleid()取得list里的第一个对象的值的时候报错:java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xxx,因为list里存放的不是RolePermission实体对象,而是LinkedHashMap,因此需要json转换。

3 解决方式从list中取出来的数据需要进行转化成json格式字符串,然后再将该json格式字符串转换成对象。

3.1使用json-lib对其进行转换

pom.xml文件导入依赖

<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.3</version>
<classifier>jdk15</classifier>
</dependency>


 后台循环list代码:

//遍历list
for(RolePermission rolePermission:list){
// 将list中的数据转成json字符串
JSONObject jsonObject=JSONObject.fromObject(polePermission);
//将json转成需要的对象
RolePermission rolePermission = (RolePermission)JSONObject.toBean(jsonObject, RolePermission.class);

}

 3.2使用fast-json对其进行转换

pom.xml文件导入依赖

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.61</version>
</dependency>

 java后台取值

//遍历list
for(RolePermission rolePermission:list){
// 将list中的数据转成json字符串
String jsonObject=JSON.toJSONString(object);
//将json转成需要的对象
RolePermission rolePermission= JSONObject.parseObject(jsonObject,RolePermission.class);
}

原文地址:https://www.cnblogs.com/konglxblog/p/14095768.html