2014-02-07 3 views
3

У меня есть конечная точка API, который определяется как:Могу ли я использовать varargs в декларации метода переоснащения?

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

где ids может быть один объект идентификатор или разделённых запятыми список идентификаторов.
, например.
https://api-server.com/something/abcd1234
https://api-server.com/something/abcd1234,abcd4567,gdht64332

если одиночный идентификатор дается (и соответствующий объект найден) я вернусь объект JSon:
{ "blah" : "blah" }

Если несколько идентификаторов приведены, Я получаю ответ в json array:
[{"blah1":"bleh"}, {"blah2":"meh"}, {"blah3":"blah"}]

В настоящее время я думал, что я должен выполнять это как два метода (это может быть сделано в одном?):

один, что принимает один идентификатор и возвращает один объект:

@GET("/something/{id}") 
void getObject (@Path("id") String objectId, Callback<MyObject> callback) 

и

один, что занимает несколько идентификаторов и возвращает массив объектов.

@GET("/something/{ids}") 
void getObject (Callback<MyObject[]> callback,@Path("ids") String ... objectIds) 

Есть ли способ, чтобы кормить 2-й метод и переменные аргументы сцепить их в поле ID?

Благодаря

ответ

3

дооснащения не может знать, как вы хотите присоединиться строки в пути. В то время как запятые кажутся очевидными, нет причин, по которым кому-то могут понадобиться трубы (|) или двоеточия (:) или что угодно.

Из-за этого мы ничего не делаем и полагаемся на вас на выбор.

Там в два решения этого:

  • Используйте String как тип аргумента и присоединиться на месте вызова. Например:

    foo.getObject(Joiner.on(',').join(things)); 
    
  • Использовать пользовательский объект, toString() метод имеет дело с возвращением правильного формата для одного или нескольких объектов.

+1

Thanks Jake. Конечно, я согласен с тем, что любой вид разделителя соединений может быть допустимым прецедентом. Я думал, что может быть тип решения * path transformer *, где преобразование по умолчанию - это 'toString', но могут быть предоставлены альтернативные преобразования (в данном конкретном случае - разделитель запятой).Я думаю, что попробую альтернативу пользовательских объектов. – copolii

Смежные вопросы