2016-04-26 14 views
1

私はこれを見ましたtutorialjson bodyとurl paramsでhttp投稿を送信するにはどうすればよいですか?

List<NameValuePair> params = new ArrayList<NameValuePair>(); 
params.add(new BasicNameValuePair("username", "John")); 
params.add(new BasicNameValuePair("password", "pass")); 
httpPost.setEntity(new UrlEncodedFormEntity(params)); 

String json = "{"id":1,"name":"John"}"; 
StringEntity entity = new StringEntity(json); 
httpPost.setEntity(entity); 
httpPost.setHeader("Accept", "application/json"); 
httpPost.setHeader("Content-type", "application/json"); 

私はチュートリアルの例に従えば

のparams体でJSONとURLとPOSTのHTTPリクエストを送信したい、

ます2番目のsetEntityは最初のsetEntityを上書きしますか?

もしそうなら、どうすればいいですか?

+0

この目的は何ですか?あなたはすでに最初のコードに '' UrlEncodedFormEntity''を送りました。あなたはそれの上にjsonを送ることはできません。だから、第2の '' setEntity''は最初のものを上書きします。 – f1sh

答えて

2

setEntityは現在のエンティティを設定するだけで、setHeaderメソッドのように追加しません。

HTTPでは、実行しようとしている複数のエンティティをPOSTできません。

私は1つのJSON StringEntityにすべてのデータをコンパイルし、そのを送信する、または単にUrlEncodedFormEntity

String json = "{"username":"John", "password":"pass", "id":1, "name":"John"}"; 
StringEntity entity = new StringEntity(json); 
httpPost.setEntity(entity) 
httpPost.setHeader("Accept", "application/json"); 
httpPost.setHeader("Content-type", "application/json"); 

または

List<NameValuePair> params = new ArrayList<NameValuePair>(); 
params.add(new BasicNameValuePair("username", "John")); 
params.add(new BasicNameValuePair("password", "pass")); 
params.add(new BasicNameValuePair("id", "1")); 
params.add(new BasicNameValuePair("name", "John")); 
httpPost.setEntity(new UrlEncodedFormEntity(params); 
-1

推測httpPostにすべてを追加することをお勧めは、WebRequestクラスタイプです。

2番目のsetEntityは最初のsetEntityを上書きしますか?

はい、そうです。 POSTリクエストを作成する

、あなたはこれを行う必要があります:this SO questionへの回答を見て、体でJSONオブジェクトを設定するには

httpPost.Method = "POST"; 

を。

string serializedObject = Newtonsoft.Json.JsonConvert.SerializeObject(entity); 

using (var writer = new StreamWriter(request.GetRequestStream())) 
{ 
    writer.Write(serializedObject); 
} 
var response = request.GetResponse() as HttpWebResponse; 
関連する問題