Возможно ли иметь вложенные 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"}