java - 当响应没有按预期出现时,如何使用 GSON 解析 json?

标签 java json parsing gson

我正在开发与 Rest 服务的集成,其响应是 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 选择最合适的反序列化对象,或者我是否必须尝试反序列化,假设它已经正确并在 catch block 上处理它?<​​/p>

我希望我能说清楚,并期待您的建议。

干杯

保罗·阿尔梅达

最佳答案

假设 REST 服务正确,响应代码应指示请求是否成功。在这种情况下,您可以根据不同的响应代码做出决定。

对于未正确实现的 REST 服务,您可能希望将响应数据反序列化为“弱”(映射)类型,例如 JsonObject(如果需要,您可以进一步处理,具体取决于处理数据的内容)。

关于java - 当响应没有按预期出现时,如何使用 GSON 解析 json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15143448/

相关文章:

parsing - 使用 ocamllex/ocamlyacc 解析部分语法

Java - 更改 BufferedImage 文件

java - 线程 "main"java.lang.InternalError : internal error: SHA-1 not available 中的异常

java - JUnit Spring Boot 应用程序 - 无法 Autowiring 字段

java - 如何在java中设置android应用程序主题,

c# - 如何安全地将包含转义 JSON 的字符串转换为有效的 JSON?

c++ - RapidJSON : Differences between building using Document or Writer

python - 为什么这个 JSON 数据无效?

c# - Convert.ChangeType() 对字符串值有意义吗?

c# - 解析 CSV 格式的文本文件