【发布时间】:2020-04-20 10:11:21
【问题描述】:
我正在尝试使用 Retrofit2 和 Kotlin 发送一个复杂对象作为我的请求的参数。 该对象的结构如下:
{
"id": "..."
"token": "..."
"message": "..."
"list1": [
{ "id": 1, "value": 2 },
{ "id": 2, "value": 5 }
//and so on...
]
"list2": [
{ "id": 10, "value": 16 },
{ "id": 11, "value": 21 }
//and so on...
]
//and so on...
}
列表字段的数量是各种(可以是 2 个列表,可以是 10 个)以及每个列表中的项目数。 我正在使用以下代码来实现这一点,之前用适当的值填充了我的地图:
@JvmSuppressWildcards
@FormUrlEncoded
@POST("get_data.php")
fun getResponse(
@FieldMap params: Map<String, Any>
): Observable<ResponseModelResult>
由于某种原因,该方法无法正常工作,服务器只是忽略了我的参数。
我也尝试将它们作为@Body 字符串/对象发送,但似乎服务器只接受 FormUrlEncoded 数据。
谁能给我一个例子,我应该如何使用@FieldMap 方法发送这些数据作为参数?
【问题讨论】:
-
您应该先创建 Json 对象,然后您可以使用 @Field 将此对象作为字符串传递。为此,您将需要任何键来传递此对象。
-
@MaradiyaKrupa 抱歉,我不明白。您所说的“将需要任何键来传递此对象”是什么意思?
-
如果服务器只接受 FormUrlEncoded,您的代码应该可以正常工作。 @FieldMap(encoded = true) 这是你唯一能做的改变。
标签: android kotlin retrofit retrofit2