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

来源:互联网 发布:多线程编程java代码 编辑:程序博客网 时间:2024/05/01 19:59

会报错: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;


0 1