我在 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/