java.util.LinkedHashMap cannot be cast to com.entity.Person
使用mybatis, resultMap映射的是實體類Person, 查詢出來的結果是一個ArrayList<Person>,然后結果存放在一個ListObject的data屬性中,
存放結果的類
public class ListObject { private Object data; public Object getData() { return data; } public void setData(Object data) { this.data = data; } }
強制轉換成List<Person> result = (List<Person>)result.getData();沒有報錯, 也拿到了數據,當使用for循環的時候報錯 java.util.LinkedHashMap cannot be cast to com.entity.Person
ListObject result = method.query(name); List<Person> result = (List<Person>)result.getData();
for(Person per : result){ sourceList.add(per .getId()); }
解決方法:
導入 net.sf.json 類,使用JSONObject中的方法, 先將數據轉成json字符串, 在轉成實體對象
ListObject result = method.query(name);
List<Person> result = (List<Person>)result.getData();
for(Object obj : result){
JSONObject jsonObject=JSONObject.fromObject(objectStr);
Person per = (Person)JSONObject.toBean(jsonObject, Person.class);
sourceList.add(per.getId());
}
主要就是兩步
JSONObject jsonObject=JSONObject.fromObject(objectStr); // 將數據轉成json字符串
Person per = (Person)JSONObject.toBean(jsonObject, Person.class); //將json轉成需要的對象
net.sf.ezmorph.bean.MorphDynaBean cannot be cast to xxx
當需要轉換的json中包含有集合的時候, 需要先建一個map,將需要轉換的對象中的集合中的對象放進map, 然后使用JSONObject.toBean(jsonObject,Person.class,maps);進行轉換.
具體操作:
teacher類中有一個List<Student> stu, 當需要轉化teacher時, 就需要多寫一個map對象
import java.util.List; /** * @author xukai * */ public class Teacher { private String teaId; private String teaName; private List<Student> stu; public Teacher() { } //getter setter }
JSONObject jsonObectj = JSONObject.fromObject(teacher);
Map<String, Class> map = new HashMap<String,Class>(); map.put("stu", Student.class); // key為teacher私有變量的屬性名 如果有多個集合需要轉換, 寫多個map.put()即可
Teacher teacherBean = (Teacher) JSONObject.toBean(jsonObectj, Teacher.class, map);
主要就是在原先的方法基礎上, 加一個map, 用來存集合轉換的類型