REST webservice没有收到Android HttpPost参数

时间:2014-04-18 09:39:26

标签: java android web-services http-post

我有一个Web服务,它接收2个(可选)参数:

<resource path="getLogbookEvents">
   <method name="POST">
     <request>
        <param name="startDate" style="query" type="xs:string"/>
        <param name="endDate" style="query" type="xs:string"/>
     </request>
     <response>
        <representation mediaType="application/json"/>
     </response>
   </method>
</resource>

我可以使用HttpPost连接并从Android接收答案,但Web服务从不接收这两个参数中的任何一个。

HttpClient httpclient = new DefaultHttpClient();
HttpPost post = new HttpPost("http://... method URL ...");
//post.setHeader("media-type", "application/json; charset=UTF-8");

ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("startDate", "2014-04-18T05:00:00"));
nameValuePairs.add(new BasicNameValuePair("endDate", "2014-04-18T06:00:00"));

UrlEncodedFormEntity entity = new UrlEncodedFormEntity(nameValuePairs);

// entity.setContentEncoding(HTTP.UTF_8);
post.setEntity(entity);

// make POST request to the given URL
HttpResponse httpResponse = httpclient.execute(post);

// receive response as inputStream
inputStream = httpResponse.getEntity().getContent();

我已经尝试过HttpParams,JSONObject和nameValuePairs,但没有任何效果。我只是继续收到响应,好像我没有指定任何参数。关于为什么会发生这种情况或者我可以尝试获得胜利组合的任何想法?

2 个答案:

答案 0 :(得分:1)

不是直接的答案,从不直接使用httpclient,而是调试/修复此问题,你可以:

  • 使用代理并查看从手机发送的数据
  • 使用易于使用的http库,例如http-request
  • retrofit

转到http请求。它很简单易用。相信我。

答案 1 :(得分:0)

我终于成功了。

所以,首先,网络服务确实存在问题。 我不确定是什么,修理它并不是我的事,所以我甚至都不会试图找出它是什么。

基本上,getLogbookEvents没有接收参数,因为它不接受请求体内的任何参数,周期。查看发送的SoapUI原始数据,我发现它始终在URL内部发送参数,而不是正文...

我不知道他们如何使用POST方法来表现得像GET方法一样,但是就目前而言他们显然是这样做的。将我的nameValuePairs格式化为UTF-8并将其添加到URL是(完全倒退,根本不推荐)我开始工作的方式:)

ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("startDate", "2014-04-18T05:00:00"));
nameValuePairs.add(new BasicNameValuePair("endDate", "2014-04-18T06:00:00"));

String paramString = URLEncodedUtils.format(nameValuePairs, "utf-8");
HttpPost post = new HttpPost("... basic URL String ..." + paramString);