我正在尝试使用MultipartEntity创建以下服务器POST请求:
parameters: {"parameter1"=>"parameter1", "parameter2"=>{"sub_parameter1"=>"sub_parameter1", "sub_parameter2"=>"sub_parameter2"}}
我目前使用的是:
multipartEntity.addPart("parameter1", new StringBody("parameter1"));
FormBodyPart parameter2 = new FormBodyPart("parameter2", new StringBody("")); // It wouldn't allow a null ContentBody
parameter2.addField("sub_parameter1", "sub_parameter1");
parameter2.addField("sub_parameter2", "sub_parameter2");
但是,子字段不会携带。我得到:
parameters: {"parameter1"=>"parameter1", "parameter2"=>""}
如何在MultipartEntity或它包含的FormBodyPart元素中创建嵌套结构?
答案 0 :(得分:6)
一旦您了解了表单条目是如何通过HTTP连接传输的,您就会理解它不可能与多表单请求以及url编码的请求嵌套。
事情很简单。多部分表单请求的格式为:--- content-boundary ---
Content-Disposition: form-data; name="form_data_name"
[content (skipped)]
--- content-boundary ---
是的。以下格式的单个数据表单条目流:[表单条目名称] - > [表单条目内容],对表单中的每个条目重复。它不是递归的,因此可能没有任何嵌套结构。
来源:
答案 1 :(得分:2)
考虑在请求正文中发送json。这样你就可以发送任何你想要的东西。
答案 2 :(得分:2)
这样的事情:
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("selectedGroup", new StringBody(group));
reqEntity.addPart("selectedService", new StringBody(service.toString()));
reqEntity.addPart("selectedTransformation", new StringBody(transformation.toString()));
reqEntity.addPart("projectId", new StringBody(projectId.toString()));
检查此链接的示例8。也是例子23 Example Site
希望这可以帮助您解决问题。
答案 3 :(得分:1)
为什么不发布整个Json对象而不是发布每个字符串值 Json对象。
答案 4 :(得分:0)
我有类似的要求,我最终调整了服务器端的代码以删除参数2,以便在客户端使用MultipartEntity。它工作得非常好。
net::ERR_CONTENT_LENGTH_MISMATCH