【问题标题】:How to use model in query string for Retrofit 2?如何在 Retrofit 2 的查询字符串中使用模型?
【发布时间】:2019-03-18 09:10:14
【问题描述】:

我正在使用如下所示的类模型来保存搜索数据信息,

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)

我试图防止函数中有大量参数,并有一个可选的查询字符串参数。

【问题讨论】:

  • 我认为除了明确指出所有参数之外没有其他解决方案

标签: android kotlin retrofit2


【解决方案1】:

您应该使用 URL 编码并将 Map 传递给查询。

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

然后在您的SearchDataModel 中添加一个方法,将属性添加到Map&lt;String, String&gt; 并将其传递给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())


祝你好运 :)

【讨论】:

  • 嗨@Tomas,我正在调查QueryMapFieldMap。使用任何一种似乎都可以达到相同的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-18
  • 2016-12-15
  • 1970-01-01
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多