当前位置: 首页 > 知识库问答 >
问题:

使用Reform2发送复杂对象

蔺敏达
2023-03-14

我正在尝试使用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>

由于某种原因,这种方法无法正常工作,服务器只是忽略了我的参数。我还尝试将它们作为@bodystring/ject发送,但服务器似乎只接受FormUrlEncoded数据。

有人能给我举个例子,说明我应该如何使用FieldMap方法将这些数据作为参数发送吗?

共有3个答案

简培
2023-03-14

最后,我找到了一个解决方案。似乎改装无法处理<代码>

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>

也许,总体而言,这不是最好的方法,但至少对我来说是可行的。

百里俭
2023-03-14

您可以使用如下所示的@Field来代替@FieldMap。

@jvmsuppressvidcards@FormUrlEncoded@POST(“get\u data.php”)fun getResponse(@Field(“your key”)jsonObject:String):可观察

将json对象作为字符串传递。

公孙成仁
2023-03-14

如果您提供了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())) 我现在坚持得到合适的结果,特别是在一个单一的地图和上面提到的字段的列表