【发布时间】:2018-01-29 02:12:44
【问题描述】:
我对一个返回不同 pojos 的 api 有两个不同的调用 -
Call<Verified> verify();
Verified json
-------------
{
"username":
"avatar_url":
"site":
...
}
Call<ApiResponse> callapi();
ApiResponse json
----------------
{
"version":
"title":
"url":
"_meta": {
"about":
},
"items": [
{
"id":
"url":
"date":
...
},
...
]
}
我只想要内部 items 数据,所以我为它编写了一个自定义 Retrofit 信封转换器 -
public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations,
Retrofit retrofit) {
final Converter<ResponseBody, ApiResponse> delegate =
retrofit.nextResponseBodyConverter(this, ApiResponse.class, annotations);
return value -> {
ApiResponse envelope = delegate.convert(value);
return envelope.items;
};
}
所以现在我可以使用Call<List<Item>> callapi(); 拨打电话。
但由于某种原因,verify() 调用不起作用。在这种情况下,响应始终为空。如果我添加此检查 -
if (type != ApiResponse.class)
return null;
在转换器中它可以工作,但奇怪的是导致callapi() 无法抛出错误Expected BEGIN_ARRAY but was BEGIN_OBJECT。为什么转换器不工作?另外,如果转换器无法解析 json 响应,Retrofit 不应该退回到下一个转换器吗?
【问题讨论】: