Дооснащение, запрос на получение с ненужными параметрами - PullRequest
2 голосов
/ 28 октября 2019

У меня есть запрос GET, подобный этому http://176.57.71.76/api/user_vacancy?employment=full_time&time=7&house=0&sort=name

, но иногда мне нужно указать параметры запроса employment, time и т. Д.

Теперь у меня естьthis

@GET("user_vacancy")
fun getVacanciesWithFilter(): Single<VacanciesListResponse>

Нужно ли писать отдельный запрос для каждого параметра или я могу как-то обойти это?

Ответы [ 2 ]

3 голосов
/ 28 октября 2019

Добавьте ваш запрос / фильтр в соответствии с вашими потребностями

val hashMap = HashMap<String, String>()
            hashMap.put("employment", "full_time")
            hashMap.put("time", "7")
            hashMap.put("house", "0")
            hashMap.put("sort", "name")

предположим, что вам не нужен фильтр дома и сортировки, тогда вам не нужно помещать их в hashmap

как,

val hashMap = HashMap<String, String>()
            hashMap.put("employment", "full_time")
            hashMap.put("time", "7")

затем вызов вашего API

apiService.getVacanciesWithFilter(hashMap)

В вашем классе обслуживания API

@GET("user_vacancy")
    fun getVacanciesWithFilter(
        @QueryMap hashMap: Map<String, String>
    ): Single<VacanciesListResponse>
2 голосов
/ 28 октября 2019

Вам не нужно писать отдельный код для каждого параметра запроса. Retrofit поддерживает необязательные параметры запроса. Вот код Java для вашего примера. Если вы передадите null для любого параметра, Retrofit пропустит этот запрос при формировании запроса.

@GET("user_vacancy") Single<VacanciesListResponse> getVacanciesWithFilter(
    @Query("employment") String employmentType, 
    @Query("time") int time
);

Дополнительная информация здесь . Использование QueryMap также является хорошим подходом, как упоминалось в другом ответе.

...