是否可以在多部分POST中使用嵌套的MultipartEntities或FormBodyPart?

时间:2013-04-28 05:39:43

标签: android apache http multipartentity

我正在尝试使用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元素中创建嵌套结构?

5 个答案:

答案 0 :(得分:6)

一旦您了解了表单条目是如何通过HTTP连接传输的,您就会理解它不可能与多表单请求以及url编码的请求嵌套。

事情很简单。多部分表单请求的格式为:

--- content-boundary ---
Content-Disposition: form-data; name="form_data_name"

[content (skipped)]
--- content-boundary ---

是的。以下格式的单个数据表单条目流:[表单条目名称] - > [表单条目内容],对表单中的每个条目重复。它不是递归的,因此可能没有任何嵌套结构。

来源:

  1. 17.13.4 Form content types
  2. RFC 2045 Internet Message Bodies

答案 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对象。

浏览此链接http://hmkcode.com/android-send-json-data-to-server/

答案 4 :(得分:0)

我有类似的要求,我最终调整了服务器端的代码以删除参数2,以便在客户端使用MultipartEntity。它工作得非常好。

net::ERR_CONTENT_LENGTH_MISMATCH