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);
}

 

posted @ 2020-12-07 10:01  程序员小明1024  阅读(2679)  评论(0编辑  收藏  举报