Как добавить массив в части данных Java HTTP POST-запроса? - PullRequest
1 голос
/ 18 января 2012

Я пишу запрос HTTP POST в Java, используя Apache HttpPost и MultipartEntity.В части данных запроса я могу добавить простые части, используя addPart(name, StringBody).Тем не менее, мне нужно добавить часть тела, которая является массивом значений.Как мне это сделать?Пример из запроса curl:

curl -k -H "Content-Type: application/json" --data '{ "name":"someName", 
"email":"noone@nowhere.com", "properties" : { "prop1" : "123", "prop2" : "abc" }}' 
-X POST 'https://some.place.com/api/test'

В Java я могу создать такой запрос, но мне нужно знать, как создать значение массива «properties», поскольку StringBody для одного значения:

HttpPost httpPost = new HttpPost(newAdultUrl);
MultipartEntity entity = new MultipartEntity();
entity.addPart("name", new StringBody("someName"));
entity.addPart("email", new StringBody("noone@nowhere.com"));
entity.addPart("properties", new ??? );
httpPost.setEntity(entity);

Спасибо за помощь!

Ответы [ 5 ]

4 голосов
/ 29 мая 2012

Я сделал то же самое, что и Роберг, но у меня получилось, когда я добавил [] в конец клавиш, например:

 entity.addPart("properties[]", new StringBody("value 1"));
 entity.addPart("properties[]", new StringBody("value 2"));
 entity.addPart("properties[]", new StringBody("value 3"));
2 голосов
/ 19 января 2012

Вот один подход, который работает с использованием StringEntity вместо MultipartEntity:

HttpPost httpPost = new HttpPost(newUrl);
String jsonData = <create using your favorite JSON library>;
StringEntity entity = new StringEntity(jsonData);
httpPost.setEntity(entity);

Я бы хотел увидеть ответ, используя MultipartEntity, если он есть, но это сделает работу.

1 голос
/ 18 января 2012

В StringBody передайте метод, который преобразует массив в json.Например JSONArray

new JSONArray(collection).toString()
0 голосов
/ 05 июля 2014

Для меня properties[] или properties НЕ работает для меня.

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

 entity.addPart("properties[0]", new StringBody("value 1");
 entity.addPart("properties[1]", new StringBody("value 2");
 entity.addPart("properties[2]", new StringBody("value 3");
0 голосов
/ 25 апреля 2014

Я тоже боролся с этим и смог найти ответ.

entity.addPart("properties[prop1]", new StringBody("123");
entity.addPart("properties[prop2]", new StringBody("abc");
...