2012-01-18 6 views
1

私は、JavaでApache HttpPostMultipartEntityを使ってHTTP POSTリクエストを書いています。リクエストのデータ部分では、addPart(name, StringBody)を使用して簡単な部品を追加できます。しかし、値の配列である本体部分を追加する必要があります。これはどうすればいいですか?カール要求の例は次のとおりです。JavaではJava HTTP POSTリクエストのデータ部分にどのように配列を追加しますか?

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

、私はこのような要求を作成することができますが、StringBodyは単一の値ですので、私は、「プロパティ」配列値を作成する方法を知っておく必要があります。

HttpPost httpPost = new HttpPost(newAdultUrl); 
MultipartEntity entity = new MultipartEntity(); 
entity.addPart("name", new StringBody("someName")); 
entity.addPart("email", new StringBody("[email protected]")); 
entity.addPart("properties", new ???); 
httpPost.setEntity(entity); 

ありがとうございました!

+0

エンコードを行うにはJSONライブラリを使用する必要があります。これははるかにクリーンで柔軟性があります。簡単なのはGsonです。 – Viruzzo

+0

私は1つのアプローチを見つけました。私はMultipartEntityの代わりにStringEntityを使用し、必要なさまざまなデータフィールドからJSON文字列を作成することができます(Gsonとjson-simpleの両方をスタックに使用しています)。しかし、上記のコードサンプルからMultipartEntityアプローチを使用する方法を誰かが知っていれば、私はまだそのアプローチを好むでしょう。 –

答えて

2

例えば
ではなくMultipartEntityのStringEntityを使用して動作する一つのアプローチは、仕事が終わった。

1

StringBodyでは、配列をjsonに変換するメソッドを渡します。

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

私は1つがある場合MultipartEntityを使用して答えを見たいのですが、これが得る:ここではJSONArray

new JSONArray(collection).toString() 
+0

これは、配列の代わりにStringとして配列を渡します。私は "プロパティ":{"キー": "値"} "ではなく、" "キー": "値" "が必要です。 –

+0

InputStreamを作成し、org.apache.http.entity.mime.content.InputStreamBodyを使用してみてください。実際に私はあなたの質問を誤解しています。今は推測しています – Farmor

4

私はRobergと同様のことをしたが、私は、キーの最後に[]を追加したときに私のためのように、働いていた:

entity.addPart("properties[]", new StringBody("value 1")); 
entity.addPart("properties[]", new StringBody("value 2")); 
entity.addPart("properties[]", new StringBody("value 3")); 
0

私もこれで苦労して答えを把握することができました。私にとって

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

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"); 
関連する問題