Возможно ли иметь вложенные MultipartEntities или FormBodyPart в многостраничном POST?

Я пытаюсь сделать что-то следующим POST-запросом сервера, используя MultipartEntity:

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, которые она содержит?

Ответ 1

Как только вы увидите, как записи формы передаются по HTTP-соединению, вы поймете, что невозможно иметь что-либо, вложенное в многообразный запрос, а также с запросом url-encoded.

все очень просто. запрос на многостраничную форму имеет формат:

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

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

что он. существует поток отдельных записей формы данных в формате: [имя записи формы] → [содержимое записи формы], которое повторяется для каждой записи в форме. он не рекурсивный, поэтому не может быть никаких вложенных структур.

Источники:

Ответ 2

Рассмотрите возможность отправки json в тело запроса. Таким образом вы можете отправить все, что хотите.

Ответ 3

Что-то вроде этого:

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()));

Проверьте exapmle 8 этой ссылки. Кроме того, exappleple 23 Пример сайта

Надеюсь, это поможет вам в решении вашей проблемы.

Ответ 4

почему вы не отправляете весь объект Json, а не публикуете каждое строковое значение объекта Json.

Перейдите по этой ссылке http://hmkcode.com/android-send-json-data-to-server/

Ответ 5

У меня было подобное требование, и я решил настроить код на моей стороне сервера, чтобы удалить параметр 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"}