我想在多部分查询中发送同一参数的多个值。这是我的代码:
接口:
@Multipart
@POST("user")
Observable<Void> updateUser(@PartMap() Map<String, RequestBody> partMap, @Part MultipartBody.Part photo);
此请求允许我使用新图片和一些参数更新用户。在参数中,我可以使用名为&#34;技能[]&#34;的参数指定用户的技能。要指定可以在数量上变化的参数,我使用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]
答案 0 :(得分:2)
我仍然使用HashMap<String, RequestBody>
,但我提供了不同的参数名称:
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);
}
答案 1 :(得分:-1)
使用它来创建文本RequestBody对象:
RequestBody userPhone = RequestBody.create(MediaType.parse("text/plain"), phoneNumber);
RequestBody userEmail = RequestBody.create(MediaType.parse("text/plain"), email);
希望这有帮助。