4

我有一个 API 端点,定义为:

GET https://api-server.com/something/{id_or_ids}

whereids可以是单个对象 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)

有没有办法提供第二种方法可变参数并将它们连接到 id 字段中?

谢谢

4

1 回答 1

4

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

因为这个事实,我们什么都不做,只靠你来选择。

对此有两种解决方案:

  • 用作参数类型并在String调用站点加入。例如:

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

于 2014-02-07T20:28:34.720 回答