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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gson.fromJson没有处理错误的响应相关的知识,希望对你有一定的参考价值。

我在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");
        }
    }
}
答案

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

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

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

以上是关于Gson.fromJson没有处理错误的响应的主要内容,如果未能解决你的问题,请参考以下文章

Gson fromJson() 用法

使用Gson解析报错

Gson fromJson 在 Proguard 之后返回 null

Gson 最常用的功能

Gson 使用总结 高级用法

Gson 使用总结 高级用法