【问题标题】:Using multiple values for the same param in a multipart's PartMap request with Retrofit 2使用 Retrofit 2 在多部分的 PartMap 请求中为同一参数使用多个值
【发布时间】:2017-06-06 10:20:32
【问题描述】:

我想在多部分查询中发送相同参数的多个值。这是我的代码:

界面:

@Multipart
@POST("user")
Observable<Void> updateUser(@PartMap() Map<String, RequestBody> partMap, @Part MultipartBody.Part photo);

此请求允许我使用新图片和一些参数更新用户。在参数中,我可以使用名为“skills[]”的参数指定用户的技能。为了指定数量可变的参数,我使用了 HashMap;但是,对于 HashMap,我无法使用相同的名称指定多个参数。

即我做不到:

for(Integer skill : skills) {
    RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), skill.toString());
    map.put("skills[]", body);
}

因为地图只会接受同一个键的一个值。

如何指定参数的多个值。使用 Postman 测试请求没有问题。

我尝试改用HashMap&lt;String, List&lt;RequestBody&gt;&gt;

List<RequestBody> bodies = new ArrayList<>();
for(Integer skill : skills) {
    RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), skill.toString());
    bodies.add(body);
}
map.put("skills[]", bodies);

但似乎不支持。创建的查询包含请求正文的空值:

Content-Disposition: form-data; name="skills[]"
Content-Transfer-Encoding: binary
Content-Type: application/json; charset=UTF-8
Content-Length: 16

[null,null,null]

【问题讨论】:

  • 查看这个答案。答案是关于如何在 volley 中发布 multipale 参数,但我想它在你的情况下工作。我在我的项目中为 Retrofit 做同样的事情,它工作正常可能是这样对你有帮助。这里是the refernce

标签: java android hashmap retrofit2 multipart


【解决方案1】:

感谢Andy Developer修复

我仍然使用HashMap&lt;String, RequestBody&gt;,但我提供了不同的参数名称:

for(int i = 0; i < skills.size(); i++) {
    Integer skill = skills.get(i);
    RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), skill.toString());
    map.put("skills[" + i + "]", body);
}

【讨论】:

    【解决方案2】:

    使用它来创建文本 RequestBody 对象:

      RequestBody userPhone = RequestBody.create(MediaType.parse("text/plain"), phoneNumber);
      RequestBody userEmail = RequestBody.create(MediaType.parse("text/plain"), email);
    

    希望这会有所帮助。

    【讨论】:

    • 谢谢,但我在创建 RequestBody 时没有问题,我的问题是多个请求正文具有相同的名称(在我的情况下为“skills[]”)
    • 哦,你可以制作一个 JSONArray 并发送它。检查此链接stackoverflow.com/questions/11449803/…
    猜你喜欢
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2014-03-02
    • 2021-04-20
    • 1970-01-01
    相关资源
    最近更新 更多