Java-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;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM