【问题标题】:Tricky @Field description for RetroFit FormUrlEncoded parameter using a List of Objects使用对象列表的 RetroFit FormUrlEncoded 参数的棘手@Field 描述
【发布时间】:2015-01-14 21:52:18
【问题描述】:

我正在使用@FormUrlEncoded 执行@POST 操作,因为我要访问的 API 需要 HTTP 参数作为输入。

目标 API 期望看到的参数应该类似于(简化):

alist[0][object1]=1&alist[0][object2]=astring&alist[1][object1]=2&alist[2][object2]=bstring

JsonIzed(为了清楚起见)看起来像:

{ 
  "alist": [
    { 
      "object1" : "1",
      "object2" : "astring"
    },
    { 
      "object1" : "2",
      "object2" : "bstring"
    }
  ]
}

所以本质上,alist[0][object1] 是 1,alist[0][object2] 是“astring”。

我得到的最接近的是使用@FieldMap:

...
@FieldMap Map<String,String> myFieldMap
...

我有这样的事情:

@FormUrlEncoded
@Post("/somewhere")
SearchHandle search(@FieldMap Map<String, String> myMap);

这让我很感动:

{ 
  "alist": {
    "0" : {
        "object1" : "1",
        "object2" : "astring"
    },
    "1" : {
      "object1" : "2",
      "object2" : "bstring"
    }  
  }    
}

这很接近 - 但 API 需要一个数组。所以我需要一个......究竟是什么?有什么想法吗?

【问题讨论】:

    标签: java forms retrofit url-parameters


    【解决方案1】:

    为您的数据建模创建一个类:

    class model {
      String object1;
      int object2;
    }
    

    现在您的 alist 应该是一个模型对象数组,您可以使用 Gson 或 jackson 等从您的数组创建 json 对象。

    【讨论】:

    • 但是,它需要是@FormUrlEncoded - 所以作为一个 JsonObject 对我没有任何好处?
    猜你喜欢
    • 2020-03-07
    • 2020-04-08
    • 2016-07-17
    • 2020-07-03
    • 2021-11-02
    • 1970-01-01
    • 2014-07-15
    • 2011-09-21
    • 2021-07-01
    相关资源
    最近更新 更多