2013-02-28 63 views
1

我正在開發與Rest服務的集成,其中響應是JSON。如果在響應未達到預期時用GSON解析json?

我做的第一個請求是登錄有兩個可能的回報。

通常情況下,積極登錄響應來自象下面這樣:

{"data":{"userID":"4f561b74001ff932afd58200a752b821","sessionID":"6cc960751eef45db83dd8db7f47337a6","versionInformation":{"currentAPI":"v2.0","buildNumber":"28b12d751c5ea88d393e68285ac57ed309ae04fa","apiVersions":{"v1.0":"\/attask\/api\/v1.0\/","v2.0":"\/attask\/api\/v2.0\/"},"lastUpdated":"2013\/02\/12 17:42:57","release":"R16","version":"4.0"},"locale":"pt_BR","timeZone":"America\/Sao_Paulo","timeZoneName":"Brasilia Time","iso3Country":"BRA","iso3Language":"por","currency":{"useNegativeSign":true,"fractionDigits":2,"symbol":"R$","ID":"BRL","groupingSeparator":".","decimalSeparator":","}}} 

我已經沒有問題,這反序列化使用GSON假設它永遠不會改變的格式。但是,如果JSON響應以不同的方式出現時呢?就像我試圖用錯誤的用戶名/密碼登錄?

的負面反應會是這樣的:

{"error":{"class":"com.attask.biz.externallogin.ExternalLoginException","message":"The following error occurred while authenticating with an external system: Invalid password"}} 

所以我的問題是,有沒有一種方法,使GSON選擇哪個是最合適的對象進行反序列化或做我必須嘗試反序列化假設它是正確的,並在抓塊上處理它?

我希望我能說清楚,我期待着您的建議。

乾杯

聖保羅Almeida的

回答

1

假設適當REST服務的響應代碼應說明閹羊請求成功與否。在這種情況下,您可以根據不同的響應代碼做出決定。您可能想要將響應數據反序列化爲'弱'(地圖)類型,如JsonObject(根據處理後的數據的內容,您可以根據需要進一步處理)。

+1

現在這一切都有意義......我要求兩個人都使用curl,並且我可以看到響應代碼已更改。看起來像那個實施了休息服務的人做他的作業=) 真正的感謝隊友 – 2013-02-28 19:09:15

0

我所做的是使用com.google.gson.JsonParser,而不是嘗試反序列化爲一個對象。通過該界面,您可以檢查頂層元素(可能檢查特定屬性),然後決定要執行的操作。

+0

這也是一個好主意。我也會嘗試一下。謝了哥們 – 2013-02-28 19:13:07