2012-06-11 23 views
2

首先,我想說我對這種曖昧的稱呼對不起......Java的異常處理(例如使用JSON)

我想知道如何處理在以下情況下例外... 我有一個從EJB接受一個字符串一個Struts動作:

try{  
    JSONObject data = new JSONObject(result); //result is String 
    String gatewayId = data.getString("gatewayId"); 
    session.setAttribute("gatewayId", gatewayId); 
}catch(Exception e){ 
    System.out.println(e.getMessage()); 
} 

編輯 進口商品有:

import org.apache.struts2.json.*; 
import org.json.*; 

在情況A JSON是:

{"gatewayId":100, "mask":4} 

在情況B JSON是:

{"success":false, "errorDesc":"bla bla"} 

如果gatewayId處於JSON我沒有問題,但問題是,從接收到的JSON EJB可以(但不一定)具有該鍵:值對。

如果有一個布爾JsonObject.hasString()方法我也沒例外拜首先檢查字符串是否存在等中的if/else if語句,但這種方式,我無法避免的例外......

我想我唯一能做的就是有根據異常的類型不同catch塊的第一件事情,但似乎所有的異常都是通用JSONException類型的,也是我不應該把任何JSON在處理代碼catch塊,因爲該代碼也可能會拋出它的例外。

請記住,我並沒有在這裏尋找我的JSON問題的確切解決方案,而是當你沒有幫助你避免有的功能時如何解決這類問題的一般性解釋例外...

我希望我的問題是有道理....

+0

在投入json對象之前,你能顯示結果並讓我知道你有什麼? –

+0

Luigi,爲了完整,請包含允許您引用JSONObject的導入語句。還有一個您正在處理的JSON字符串的簡化示例會很有用。 –

回答

3

嘗試

data.has("gatewayId"); 

這將有助於。

+0

Pankraj,謝謝......這將是解決這個具體問題的方法,但是想象一下這個庫沒有data.has()方法。我知道這將是一個不好的庫然後:)如果沒有找到json關鍵字將拋出異常... 基本上問題是你可以使用catch塊作爲流量控制?不知何故? :) – luigi7up