Как использовать модель в строке запроса для Retrofit 2? - PullRequest
0 голосов
/ 18 марта 2019

Я использую модель класса, как показано ниже, для хранения информации о поиске,

data class SearchDataModel (
    var keyword: String? = "",
    var from: String? = "",
    var to: String? = "",
    var page: Int? = null,
    var sortby: String? = null,
    var orderby: String? = null,
    var itemsperpage: Int? = null
)

Для публикации данных мы можем использовать вызов,

@POST("/data/save")
fun saveData(@Body postData: PostDataModel)

Как добиться того жедля строки запроса что-то похожее на приведенное ниже?

@GET("/data/search")
fun searchData(@QueryString searchData: SearchDataModel)

Я пытаюсь предотвратить использование большого количества параметров в функции и иметь необязательный параметр строки запроса.

1 Ответ

1 голос
/ 18 марта 2019

Вы должны использовать URL-кодировку и передать Map в запрос.

@FormUrlEncoded
@GET("/data/search")
fun searchData(@FieldMap searchData: Map<String, String>)

Затем в вашем SearchDataModel есть метод для добавления свойств к Map<String, String> и передачи его в функцию searchData.

data class SearchDataModel (
    var keyword: String? = "",
    var from: String? = "",
    var to: String? = "",
    var page: Int? = null,
    var sortby: String? = null,
    var orderby: String? = null,
    var itemsperpage: Int? = null

    fun toMap(): Map<String, String> {
        return mapOf(
            "keyword" to keyword,
            "from" to from,
            "to" to to,
            "page" to page,
            "sortby" to sortby,
            "orderby" to orderby,
            "itemsperpage" to itemsperpage
        )
    }
)

Используйте это так: searchData(searchData: yourData.toMap())Удачи:)

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