2013-02-28 38 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