java - Gson.fromJson 不处理错误响应

标签 java android json gson

我在 Android 应用程序中有一些代码,我在其中调用 Web 服务并获取对象的 json 表示形式。如果成功,它将是一个 User 对象。如果出现错误,它将是一个 RestfulStatusResponse 对象。

只要响应不是表示 User 对象的 Json 字符串,我就期望得到 JsonSyntaxException,但情况似乎并非如此。有人可以解释为什么吗?我创建了这个小测试代码来说明它。 fromJson 方法调用中的字符串不是用户。我在这里没有遇到异常:

package com.my.stuff;

import com.my.stuff.common.User;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;

import org.junit.Test;

import okhttp3.HttpUrl;

import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.fail;
import static org.junit.Assert.assertEquals;

public class JsonTest {
    @Test
    public void testFromJson() {
        Gson gson = new Gson();
        try {
            User user = gson.fromJson("{\"restfulResponseMessages\":[{\"message\":\"Invalid information\"}],\"status\":\"900\"}", User.class);
            assertTrue(true);
        }
        catch (JsonSyntaxException e) {
            fail("It failed");
        }
    }
}

最佳答案

您提供给 GSON 的 JSON 100% 完全有效。其中没有语法错误。这就是为什么您没有收到 JsonSyntaxException 的原因。

虽然它会返回一个具有完全默认值的 User 对象,因为它无法将输入 JSON 中的任何字段映射到 User 对象字段。

为了处理这样的情况,当请求顺利时,我会从后端返回 HTTP 代码 200,然后返回 User 对象。如果API调用失败,则返回HTTP代码400,并返回RestfulStatusResponse对象。然后在 API 调用中检查响应代码,并根据需要解析对象。

关于java - Gson.fromJson 不处理错误响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48064343/

相关文章:

java - 如何将图像插入SqLite DB

android - 如何在Android中运行Conv3D模型?

javascript - 设计我的谷歌地图时遇到问题

java - 当 HTTP 响应内容类型不包含空格时测试 org.apache.http.entity.ContentType

java - 在方法中的循环外部提取变量

java - 有效地进行 Java String 替换

java - 如何判断一个对象是否是 Mockito 模拟对象?

java - 使用 GSON 将嵌套 JSON 解析为通用集合

java - 匹配多个括号之间的字符串

asp.net - 有没有人设法让 OpenXml 与 dnx core 5 一起工作?