13

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

4

5 回答 5

8

一旦您了解了表单条目是如何通过 HTTP 连接传输的,您就会明白在多表单请求和 url 编码请求中嵌套任何内容是不可能的。

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

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

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

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

资料来源:

  1. 17.13.4 表单内容类型
  2. RFC 2045 互联网消息正文
于 2014-05-19T17:46:37.300 回答
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 示例站点

希望这可以帮助您解决问题。

于 2014-05-20T07:08:32.247 回答
2

考虑在请求正文中发送 json。这样你就可以发送你想要的任何东西。

于 2014-05-19T17:37:26.353 回答
1

为什么不发布整个 Json 对象而不是发布 Json 对象的每个字符串值。

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

于 2014-05-21T05:43:41.673 回答
0

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

parameters: {"parameter1"=>"parameter1", "parameter2"=>{"sub_parameter1"=>"sub_parameter1", "sub_parameter2"=>"sub_parameter2"}}

parameters: {"parameter1"=>"parameter1", "sub_parameter1"=>"sub_parameter1", "sub_parameter2"=>"sub_parameter2"}
于 2015-11-11T20:27:00.863 回答