使用 Retrofit / GSON 我如何处理有时为空而其他时候不为空的响应
Using Retrofit / GSON how can I handle responses that are sometimes empty and other times not
我正在使用 GSON 进行改造。我正在连接的 Web 服务有时 return 会向客户端发送一个空负载。我不是这样建造的。问题在于,当 GSON 尝试解析空负载时,这会导致 json 解析异常。我怎么能处理这个?有没有办法让回调有一个空模型对象?
例如服务器响应可能是“”或者它可能是:
{
"foo":{"id":"123","description":"abcd"}
}
我也在java:
@Data // This comes from lombok to generate setter,getter,no args constructor...
public class Foo{
private int id;
private String description;
}
我的改装服务是这样的:
public interface MyService{
@POST("/poorly/designed/api/foo")
void getFoo(@Header("Authorization") String auth, Callback<Foo> callback);
}
免责声明:我只是打了一个最简单的例子,如果我写的东西在语法上可能不完全正确,我可以原谅我。你明白了。
Retrofit 通常应该消除所有缺失值。您的代码的问题是服务器 return 是一个内部带有 Foo
的对象,而不仅仅是 Foo
。尝试添加另一个 class
class FooContainer {
Foo foo;
}
然后让你的 API 调用 return FooContainer
而不是 Foo
。
我正在使用 GSON 进行改造。我正在连接的 Web 服务有时 return 会向客户端发送一个空负载。我不是这样建造的。问题在于,当 GSON 尝试解析空负载时,这会导致 json 解析异常。我怎么能处理这个?有没有办法让回调有一个空模型对象?
例如服务器响应可能是“”或者它可能是:
{
"foo":{"id":"123","description":"abcd"}
}
我也在java:
@Data // This comes from lombok to generate setter,getter,no args constructor...
public class Foo{
private int id;
private String description;
}
我的改装服务是这样的:
public interface MyService{
@POST("/poorly/designed/api/foo")
void getFoo(@Header("Authorization") String auth, Callback<Foo> callback);
}
免责声明:我只是打了一个最简单的例子,如果我写的东西在语法上可能不完全正确,我可以原谅我。你明白了。
Retrofit 通常应该消除所有缺失值。您的代码的问题是服务器 return 是一个内部带有 Foo
的对象,而不仅仅是 Foo
。尝试添加另一个 class
class FooContainer {
Foo foo;
}
然后让你的 API 调用 return FooContainer
而不是 Foo
。