2014-10-10 112 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实现或使用更高版本的实现这使您可以直接格式化主体。

相关问题