【发布时间】: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<String, List<RequestBody>>:
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