2014-04-18 52 views
0

我有收到2(可選)參數的web服務:REST Web服務不收取Android HttpPost參數

<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,沒有任何工作。我只是不斷收到響應,就像我沒有指定任何參數一樣。關於爲什麼會發生這種情況的任何想法或者我可以嘗試獲得組合的其他事情?

+0

檢查數據庫的開始日期和結束日期字段結構.. – Amardeepvijay

+0

的startdate和enddate結構絕對正確。如果我使用與SoapUI相同的值來請求它,我會得到正確的數據。 – SvenT23

+0

但爲什麼你在webservice api中的type =「xs:string」中鍵入字符串......你可以獲得日期格式的開始和結束日期。 – Amardeepvijay

回答

0

我終於設法讓它工作。

因此,首先,web服務肯定有問題。 我不完全確定是什麼,我的業務不是解決問題,所以我甚至不會去查明它是什麼。

基本上,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); 
1

沒有直接回答,從來沒有使用過的HttpClient直接,但調試/解決這個問題,你可以:

  • 使用代理和看到的是真正從您的手機發送的是什麼數據
  • 利用易於使用的HTTP庫如http-request
  • retrofit

隨時隨地http請求。它使用起來很簡單。相信我。

+0

今天下午我會看看是否有幫助。但是因爲我已經得到了答案,所以應該完全可以用我現在正在做的方式來指定參數。這真的讓我開心,因爲我無法弄清楚發生了什麼問題。 – SvenT23