json 학습 시리즈(5)-json 오류 해석 넷.sf.ezmorph.bean.MorphDynaBean cannot be cast to

5825 단어 bean
최근에 json을 사용할 때 다음 오류를 보고했습니다:net.sf.ezmorph.bean.MorphDynaBean cannot be cast to java.lang.String 이런 오류는 매우 흔합니다. 왜냐하면 json이javabean으로 바뀌었을 때 기본값은MorphDynaBean 종류이기 때문입니다.아래의 예: json 문자열이javabean으로 바뀔 때 일반적인 대상은 바로 바뀔 수 있다. 예를 들어 한 학생류에 속성은 이름, 나이 등이 있다.
public class Student implements java.io.Serializable{

    private static final long serialVersionUID = 1L;

    private String sname;

    private Integer age;

    public String getSname() {

        return sname;

    }

    public void setSname(String sname) {

        this.sname = sname;

    }

    public Integer getAge() {

        return age;

    }

    public void setAge(Integer age) {

        this.age = age;

    }    

}

문자열에서 javabean으로 전환할 때 다음 방법을 사용할 수 있습니다.
String str = "[{\"sname\":\"admin\",\"age\":20}]";
    //// {} , ,
if (str.indexOf("[") != -1) { str = str.replace("[", ""); } if (str.indexOf("]") != -1) { str = str.replace("]", ""); } JSONObject jobj = JSONObject.fromObject(str); Student s = (Student) JSONObject.toBean(jobj,Student.class);

이렇게 하면 문제가 없지만 속성에 복잡한 유형이 포함되어 있으면 속성에 List, Map, ArrayList와 유사하면 안 된다.오류 발생: MorphDynaBean cannot be cast to ******.JSONObject에서toBean에서 변환된 클래스에 집합이 있으면 Map classMap = new HashMap () 을 정의할 수 있습니다.classMap에서put변환할 클래스의 집합 이름입니다. 예를 들어:classMap.put("teachers", Teacher.class);그리고 toBean () 에 매개 변수를 추가합니다. 예를 들어:Student student = (Student) JSONObject.toBean(str, Student.class, classMap); 다음은 작은 예를 하나 들자.
public class Student implements java.io.Serializable{

    private static final long serialVersionUID = 1L;

    private String sname;

    private Integer age;

    private List < String > courses;

    public String getSname() {

        return sname;

    }

    public void setSname(String sname) {

        this.sname = sname;

    }

    public Integer getAge() {

        return age;

    }

    public void setAge(Integer age) {

        this.age = age;

    }

    public List getCourses()

    {

        return courses;

    }

    public void setCourses(List courses)

    {

        this.courses = courses;

    }    

}

전환할 때 이렇게 써야 한다.
Map classMap = new HashMap();

classMap.put("courses",String.class);

Student student =( Student) JSONObject.toBean(str, Student.class, classMap);

좋은 웹페이지 즐겨찾기