Gson.fromJson没有处理错误的响应

时间:2018-01-02 16:18:57

标签: java android json gson

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

每当响应不是表示User对象的Json字符串时,我希望得到一个JsonSyntaxException,但似乎并非如此。有人可以解释原因吗?我创建了这个用来说明它的小测试代码。 fromJson方法调用中的String不是User。我在这里没有例外:

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");
        }
    }
}

1 个答案:

答案 0 :(得分:3)

您向GSON提供的JSON 100%完全有效。它中没有语法错误。这就是为什么你没有得到JsonSyntaxException。

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

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