retrofit2 - проблема с дублирующимися именами параметров URL - PullRequest
0 голосов
/ 07 октября 2018

Я кодирую клиента json / rest в java / retrofit2.Прекрасно работает, столкнуться с одной загвоздкой.Сервис, которым я являюсь клиент (teamdesk.net), использует дублированные параметры URL для экспресс-выбора определенных столбцов.(Без каких-либо параметров столбца он просто выберет все) .. вот так:

?column=firstname&column=lastname&column=age ...

Я знаю, что мог бы смоделировать это, используя N число декораторов @Query (), например:

Call<List<User>> groupList(@Query("column") String col1, @Query("column") String col2);

Проблема здесь в том, что я ограничен фиксированным числом N столбцов.Я мог бы сделать несколько методов запроса для обработки этого (1 столбец, 2 столбца, 3 столбца и т. Д.), Но это громоздко.

Я не могу использовать шаблон @QueryMap (), так как он не позволитпо понятным причинам - несколько ключей «столбца».

Я попробовал этот шаблон, и он работает:

@GET("Patient/select.json{query}")
Call<List<Patient>> getPatients(@Path("query") String urlquery);

, а затем вызывает так:

getPatients("?top=5&column=firstname&column=lastname&column=age")

Но я боюсьчто это хакерство и что какая-то более поздняя версия модифицированной системы сломает это.

Поэтому я ищу предложения:

1) Является ли мой @GET ("Patient / select.json {query}") хорошая идея?

2) есть ли лучший способ, позволяющий мне получить доступ к редактированию параметров url перед вызовом?

3) Существует ли существующий шаблон перехватчика, который можетпомощь?

4) Могу ли я написать свой собственный шаблон перехватчика для этого - я готов для этого ..

заранее спасибо.

1 Ответ

0 голосов
/ 08 октября 2018

Из модифицированной документации вы можете просто использовать varargs с аннотацией @Query, например:

@GET("Patient/select.json")
Call<List<Patient>> getPatients(@Query("column") String... columns);

, которую можно вызывать с любым количеством строк

getPatients("column1", ..., "columnN");

и приведет к URL:

yourBaseUrl / Patient / select.json? Column = column1 & ... & column = columnN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...