您的位置:首页 > 编程语言 > Java开发

JSON字符串转javabean-net.sf.ezmorph.bean.MorphDynaBean cannot be cast to java.util.Map

2014-11-20 15:48 519 查看
会报错:MorphDynaBean cannot be cast to java.util.Map

    在JSONObject.toBean的时候如果转换的类中有集合,可以先定义Map<String, Class> classMap = new HashMap<String, Class>();在classMap中put你要转换的类中的集合名,像:classMap.put("teachers", Teacher.class);然后在toBean()的时候把参数加上, 像:Student student=(Student) JSONObject.toBean(str, Student.class, classMap);

举例:

Map<String, Object> result = new HashMap<String, Object>();

result.put("code", response.getStatus());
result.put("total", sdoclist.getNumFound());
System.out.println("返回结果数:"+sdoclist.getNumFound());
result.put("costTime", time);
result.put("query", getQueryCondition());
ArrayList<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
result.put("result", resultList);
for (int i = 0; i < sdoclist.size(); i++) {
Map fieldMap = new HashMap();
SolrDocument sdoc = sdoclist.get(i);
Collection names = sdoc.getFieldNames();
Iterator itr = names.iterator();
while (itr.hasNext()) {
String name = (String) itr.next();
Object value = sdoc.getFieldValue(name);
fieldMap.put(name, value);
}
resultList.add(fieldMap);
}
存储到redis:

 
JsonConfig cfg = new JsonConfig();
cfg.registerJsonValueProcessor(java.util.Date.class,new DateJsonValueProcessor("yyyy-MM-dd HH:mm:ss"));
JSONObject json = JSONObject.fromObject(result,cfg);
redisService.setex(0,searchCondition, 3600*48,json.toString());//有效期2天


从redis取出来:将json的string转化为bean

Map<String, Class> classMap = new HashMap<String, Class>();
classMap.put("result", Map.class); //针对result这个key对应的vallue是ArrayList类型,
//ArrayList中的存储的是Map类型,所以classMap.put("result", Map.class);而不是classMap.put("result", ArrayList)
HashMap<String , String >  rmap  = new HashMap<String, String>();
Object  obj = JSONObject.toBean(JSONObject.fromObject(result_q),HashMap.class,classMap);
Map<String,Object> map =  (HashMap<String, Object>) obj;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javabean json
相关文章推荐