Exception-net.sf.json.JSONException: java.lang.reflect.InvocationTargetException处理方法之一

问题描述:

在项目中写了一个方法从数据库查询信息,返回List<Map<String,Object>>,如下面语句:

//1.根据条件获取未完成的基本信息 
List<Map<String,Object>> list = getUncompliateInfo(Condition condition);
//2.将list转为JSONArray
JSONArray array = JSONArray.fromObject(list);
obj.element("data",array);

其实一般这么写,不会出现问题,而且大部分开发者都是这么用的,但是今天我的程序报异常:

net.sf.json.JSONException: java.lang.reflect.InvocationTargetException

 问题分析:

经过我查阅资料,调试代码,发现我获取的list中的map的value值有null,也有new java.sql.date类型的时间值,这就是问题的原因。

问题原因:

获取的值有java中不识别的数据类型。如:java.sql.date,并不是java中的时间类型java.utils.date。

解决办法:

解决问题的办法是将java.sql.date转为java.utils.date,如:java.utils.date(date);并将null值写成空的字符串[ "" ];

我的解决办法是循环了获取到的list,将list中map的值遍历重新处理了一一遍,把不规范的数据规范化,所以在返回获取到的list之前,调用这个方法,处理一遍。

下面是我的处理代码,本代码仅供参考:

private List<Map<String,String>> getNewList(List<Map> list){
        List<Map<String,String>> result = new ArrayList<Map<String,String>>();
        if(!list.isEmpty()&&list.size()>0){
            Date date = new Date();
            for(Map map:list){
                Map<String,String> tempMap = new HashMap<String,String>();
                 for (Iterator i = map.keySet().iterator(); i.hasNext();) {  
                       String key = (String) i.next(); 
                       if(map.get(key)==null){
                           tempMap.put(key, "");  
                       }else{
                           tempMap.put(key, map.get(key).toString().equals("")?"":map.get(key).toString());
                       }
                      }
                 result.add(tempMap);
            }
        }
        return result;
    }

猜你喜欢

转载自www.cnblogs.com/hjwq/p/8919583.html