我有一个awebservice类的旧实现,它使用retrofit1和rxjava1,只是一个很难处理,所以从头开始编写一个新的。
对API请求的每个响应都包含以下对象
{
"status":200,
"payload": {}
}
我通过简单地将每个响应包装到一个通用对象中来绕过信封问题,并且在访问有效负载时,我可以通过调用getter轻松地做到这一点
class BaseResponse<T> {
int status;
T payload;
public T getPayload(){
return payload;
}
}
我们的想法是将此BaseResponse<T>
变为Observable<T>
,然后致电map {it.payload}
以便在其他地方使用
interface API {
@Body("blablabla")
Observable<BaseResponse<SomeResponse>> someCall(@Body SomeRequest request);
}
public Observable<SomeResponse> someCall(SomeRequest request){
return api.someCall(request)
.map( response -> response.payload)
}
现在我遇到了一个问题。有一些API请求,其中responsebody被定义为空。我将这些空响应体定义为class EmptyResponse {}
问题是我得到了像这样的空体
{
"status":200,
"payload":null
}
现在问题是payload
为空且rxjava2不想要空值。
有没有办法让GSON将null
反序列化为EmptyResponse
类型的对象?请注意,这仅适用于记录为返回空响应实体的调用,如果调用具有已记录的主体,则调用无法返回调用