我可以在改装方法声明中使用varargs吗?

时间:2014-02-07 01:45:22

标签: java retrofit

我有一个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字段中连接它们?

由于

1 个答案:

答案 0 :(得分:3)

Retrofit无法知道您希望如何加入路径中的字符串。虽然逗号看起来很明显,但没有理由为什么有人可能想要管道(|)或冒号(:)或其他什么。

由于这个事实,我们什么都不做,依靠你来选择。

有两个解决方案:

  • 使用String作为参数类型并在呼叫站点加入。例如:

    foo.getObject(Joiner.on(',').join(things));
    
  • 使用toString()方法处理的自定义对象,为一个或多个对象返回正确的格式。

相关问题