我有一个API端点定义为:
GET https://api-server.com/something/{id_or_ids}
其中ids
可以是单个对象ID 或以逗号分隔的ID列表。
例如
https://api-server.com/something/abcd1234
https://api-server.com/something/abcd1234,abcd4567,gdht64332
如果给出单个id (找到匹配的对象),我会找回 json对象:
{ "blah" : "blah" }
如果给出多个ID ,我会在 json数组中得到响应:
[{"blah1":"bleh"}, {"blah2":"meh"}, {"blah3":"blah"}]
我目前正在考虑将其作为两种方法实现(可以在一种方法中完成吗?):
一个获取单个ID并返回单个对象:
@GET("/something/{id}")
void getObject (@Path("id") String objectId, Callback<MyObject> callback)
和
获取多个ID并返回一个对象数组。
@GET("/something/{ids}")
void getObject (Callback<MyObject[]> callback,@Path("ids") String ... objectIds)
有没有办法提供第二个方法 varargs 并在id字段中连接它们?
由于
答案 0 :(得分:3)
Retrofit无法知道您希望如何加入路径中的字符串。虽然逗号看起来很明显,但没有理由为什么有人可能想要管道(|
)或冒号(:
)或其他什么。
由于这个事实,我们什么都不做,依靠你来选择。
有两个解决方案:
使用String
作为参数类型并在呼叫站点加入。例如:
foo.getObject(Joiner.on(',').join(things));
使用toString()
方法处理的自定义对象,为一个或多个对象返回正确的格式。