2014-10-10 159 views
1

我有一個RESTful API,我可以通過執行以下稱:如何利用HttpURLConnection類發送POST請求使用JSON數據

捲曲-H「內容類型:應用程序/ JSON」 -d「{‘URL’ :「http://www.example.com」}」 http://www.example.com/post

在Java中,當我從捲曲打印出接收到的請求數據,我正確地得到以下數據:

Log: Data grabbed for POST data: {"url":"http://www.example.com/url"} 

但是當我通過Java發送POST請求使用HttpClient/HttpPost,我得到格式不好的數據,不允許我從JSON獲取鍵值。

Log: Data grabbed for POST data: url=http%3A%2F%2Fwww.example.com%2Furl 

在Java中,我這樣做:

 HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("http://www.example.com/post/"); 

     List<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>(); 

     BasicNameValuePair nvp1 = new BasicNameValuePair("url", "http://www.example.com/url); 

     nameValuePairs.add(nvp1); 

     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     HttpResponse httpresponse = httpclient.execute(httppost); 

如何讓這個從Java請求是在類似的數據是如何發送條款捲曲?

+1

考慮使用Jersey:jersey.java.net – 2014-10-10 20:32:31

+0

我對HttpClient/HttpPost知之甚少,但他們是否將數據作爲JSON字符串發送?你不需要在標題中設置內容類型嗎? – Leo 2014-10-10 21:36:16

回答

2

您呈現的來自Java客戶端的數據是URL編碼的。您似乎通過使用UrlEncodedFormEntity來特別要求。 POST請求的主體不需要進行URL編碼,因此,如果您不想使用該功能,則可以使用更合適的HttpEntity實現。實際上,如果您想將通用名稱/值對轉換爲JSON格式的請求主體(如您所看到的那樣),那麼您可能需要使用特定於JSON的HttpEntity實現或使用更高版本的實現這使您可以直接格式化主體。

相關問題