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没有处理错误的响应的主要内容,如果未能解决你的问题,请参考以下文章