我正在尝试使用Retrofit2和静态编程语言发送一个复杂对象作为我请求的参数。该对象的结构如下:
{
"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个)以及每个列表中的项目数量。我正在使用以下代码来实现这一点,之前用适当的值填充了我的Map:
@JvmSuppressWildcards
@FormUrlEncoded
@POST("get_data.php")
fun getResponse(
@FieldMap params: Map<String, Any>
): Observable<ResponseModelResult>
由于某种原因,这种方法无法正常工作,服务器只是忽略了我的参数。我还尝试将它们作为@body
string/ject发送,但服务器似乎只接受FormUrlEncoded数据。
有人能给我举个例子,说明我应该如何使用FieldMap方法将这些数据作为参数发送吗?
最后,我找到了一个解决方案。似乎改装无法处理<代码>
val params = mutableMapOf<String, String>()
params["id"] = ...
params["token"] = ...
params["message"] = ...
params["list1[0][id]"] = "${1}"
params["list1[0][value]"] = "${2}"
params["list1[1][id]"] = "${2}"
params["list1[1][value]"] = "${5}"
params["list2[0][id]"] = "${10}"
params["list2[0][value]"] = "${16}"
//and so on
然后,在我的ApiService中:
@Headers("Content-Type: application/x-www-form-urlencoded")
@FormUrlEncoded
@POST("get_data.php")
fun getResponse(
@FieldMap params: Map<String, String>
): Observable<ResponseModelResult>
也许,总体而言,这不是最好的方法,但至少对我来说是可行的。
您可以使用如下所示的@Field来代替@FieldMap。
@jvmsuppressvidcards@FormUrlEncoded@POST(“get\u data.php”)fun getResponse(@Field(“your key”)jsonObject:String):可观察
将json对象作为字符串传递。
如果您提供了api或文档的演示url或其他帮助我找出更具体问题的内容,那么我将根据您的api机制更新我的答案,现在您可以尝试以下操作:
如下所示声明api接口:
@POST("get_data.php")
fun getResponse(@Query("params") params: String): Observable<ResponseModelResult>
使您的复杂对象如下所示:
val jsonObject1 = JsonObject().apply {
addProperty("id", 1)
addProperty("value", 1)
}
val jsonObject2 = JsonObject().apply {
addProperty("id", 2)
addProperty("value", 2)
}
val list1 = JsonArray().apply {
add(jsonObject1)
add(jsonObject2)
}
val jsonObject10 = JsonObject().apply {
addProperty("id", 10)
addProperty("value", 16)
}
val jsonObject11 = JsonObject().apply {
addProperty("id", 11)
addProperty("value", 21)
}
val list2 = JsonArray().apply {
add(jsonObject10)
add(jsonObject11)
}
val params = JsonObject().apply {
addProperty("id", "...")
addProperty("token", "...")
addProperty("message", "...")
add("list1", list1)
add("list2", list2)
}.toString()
在这里,您现在准备好了,调用您的api传递params
作为查询参数,例如:getACK(params)
我正在尝试将一个复杂的对象从服务器传递到客户端。我的客户端代码如下所示: 而类是: 在服务器上,我使用: 但不管用。如果我从 (“newsearch”上的
作者:徐飞 在dva的官方仓库里,提供了上手教程,讲述了dva的一些基本概念。到了真实的业务开发过程中,会遇到许许多多不能用那些基本操作覆盖的场景,本文尝试列举一些常见的需求在dva中的实现方式。 动态加载model 有不少业务场景下,我们可能会定义出很多个model,但并不需要在应用启动的时候就全部加载,比较典型的是各类管理控制台。如果每个功能页面是通过路由切换,互相之间没有关系的话,通常会使用
这是我第一次使用POJO和Lombok,并使用放心的复杂JSON。 我决定使用这种方法,因为JSON包含许多字段。。 示例JSON “value”对象包含大约50个字段。 我使用POJO创建了3个类 通过向其中的每一个添加注释 然后我尝试使用Rest保证发送一个POST请求,并这样做: > 创建一个值对象并添加一个值(我将在这里重复更多字段) 然后我发送一个POST请求 结果,我得到了错误 问题就
如果这是重复的,我想提前向您道歉,但是,我在过去的两天里一直在四处寻找,没有找到任何解决我问题的方法。 我已经创建了一个web服务,我想向其发布一个JSON对象。我的问题如下: 假设我有三个对象。 如您所见,ObjectC引用了ObjectA和ObjectB,它们也引用了ObjectA。插入新ObjectC时,ObjectC. ObjtA应该与ObjectC. ObjtB. ObjtA相同。 PO
我有一个Web Api 2项目,它有一个HttpGet方法,该方法将复杂对象的列表作为参数。像这样: 我用swashbuckle来设置我的swagger文档。但是它像这样设置这个参数: 至少对象似乎需要一些东西。 后来在定义部分我确实发现了这一点: 但它似乎没有被使用... 有没有办法设置它,让swagger理解这是一个对象列表,并给我一种为各个属性输入值的方法?(就像我对不是列表的复杂对象所做的
我有一个gprsEvents列表,其中列表中的每个元素都是一个映射 ,如下所示。我需要: null 我开始考虑使用Java8Stream(groupingBy):gprsents.stream().collectors.groupingBy(Map->map.Get(“CallChargingID”).ToString())) 我现在坚持得到合适的结果,特别是在一个单一的地图和上面提到的字段的列表