java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to

Java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to

在使用JSONObject.toBean的时候,得到的Bean里面的复杂数据类型不能转换成需要的对象类型。

demo:

创建两个实体类Teacher和Student:Teacher中有一个List类型的私有属性

package com.edu.xukai;  
  
/** 
 * @author xukai 
 * 
 */  
public class Student {  
  
    private String stuNo;  
  
    private String stuName;  
  
    public Student() {  
    }  
  
    public Student(String stuNo, String stuName) {  
        this.stuNo = stuNo;  
        this.stuName = stuName;  
    }  
  
    // getter setter  
  
    @Override  
    public String toString() {  
        return "Student [stuNo=" + stuNo + ", stuName=" + stuName + "]";  
    }  
  
}  

  

package com.edu.xukai;  
  
import java.util.List;  
  
/** 
 * @author xukai 
 * 
 */  
public class Teacher {  
  
    private String teaId;  
  
    private String teaName;  
  
    private List<Student> stus;  
  
    public Teacher() {  
    }  
  
    public Teacher(String teaId, String teaName, List<Student> stus) {  
        this.teaId = teaId;  
        this.teaName = teaName;  
        this.stus = stus;  
    }  
//getter setter  
  
}  

  

测试之前,需要导入相应的jar文件。

需要使用JSONObject,使用的jar文件是json-lib-2.2.3-jdk15.jar

下面是可能缺少jar文件导致的错误和对应的jar:

Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException
commons-lang-2.4.jar

Caused by: java.lang.ClassNotFoundException: net.sf.ezmorph.Morpher
ezmorph-1.0.6.jar

Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
commons-logging-1.1.1.jar

Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.map.ListOrderedMap
commons-collections-3.2.1.jar

Caused by: java.lang.ClassNotFoundException: org.apache.commons.beanutils.DynaBean
commons-beanutils-1.7.0.jar

jar下载链接:点击下载

测试类:

package com.edu.xukai;  
  
import java.util.ArrayList;  
import java.util.HashMap;  
import java.util.List;  
import java.util.Map;  
  
import net.sf.json.JSONObject;  
  
/** 
 * @author xukai 
 * 
 */  
public class TestJSONObject {  
      
    public static void main(String[] args) {  
        Student student_1 = new Student("学号1", "学生1");  
        List<Student> stus = new ArrayList<Student>();  
        stus.add(student_1);  
        Teacher teacher_1 = new Teacher("编号1", "教师1", stus);  
        JSONObject obj = JSONObject.fromObject(teacher_1);  
        System.out.println("JSON格式的Teacher->" + obj.toString());  
        Teacher teacherBean = (Teacher) JSONObject.toBean(obj, Teacher.class);  
        try {  
            Student studentBean = teacherBean.getStus().get(0);  
            System.out.println(studentBean);  
        } catch (Exception e) {  
            System.out.println("出现异常");  
            e.printStackTrace();  
        }  
    }  
      
}  

  运行可以看到控制台打印结果:

 

JSON格式的Teacher->{"stus":[{"stuName":"学生1","stuNo":"学号1"}],"teaId":"编号1","teaName":"教师1"}
出现异常
java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to com.edu.xukai.Student
at com.edu.xukai.TestJSONOb 
ject.main(TestJSONObject.java:25)

解决办法:使用JSONObject.toBean(jsonObject, beanClass, classMap)

package com.edu.xukai;  
  
import java.util.ArrayList;  
import java.util.HashMap;  
import java.util.List;  
import java.util.Map;  
  
import net.sf.json.JSONObject;  
  
/** 
 * @author xukai 
 * 
 */  
public class TestJSONObject {  
      
    public static void main(String[] args) {  
        Student student_1 = new Student("学号1", "学生1");  
        List<Student> stus = new ArrayList<Student>();  
        stus.add(student_1);  
        Teacher teacher_1 = new Teacher("编号1", "教师1", stus);  
        JSONObject obj = JSONObject.fromObject(teacher_1);  
        System.out.println("JSON格式的Teacher->" + obj.toString());  
          
        // 定义一个Map  
        Map<String, Class<Student>> map = new HashMap<String, Class<Student>>();  
        map.put("stus", Student.class); // key为teacher私有变量的属性名  
        // 使用JSONObject.toBean(jsonObject, beanClass, classMap)  
        Teacher teacherBean = (Teacher) JSONObject.toBean(obj, Teacher.class, map);  
        try {  
            Student studentBean = teacherBean.getStus().get(0);  
            System.out.println(studentBean);  
        } catch (Exception e) {  
            System.out.println("出现异常");  
            e.printStackTrace();  
        }  
    }  
      
}  

控制台打印结果:

JSON格式的Teacher->{"stus":[{"stuName":"学生1","stuNo":"学号1"}],"teaId":"编号1","teaName":"教师1"}  
Student [stuNo=学号1, stuName=学生1]

  

posted @ 2016-06-23 10:26  a757956132  阅读(1692)  评论(0编辑  收藏  举报