早上好!REST POST請求無法在java上工作,但適用於REST客戶端
我用C#創建了一個REST服務,我試圖從android-studio發送一個post請求到URL。我的URL目前有兩種方法,GET和POST。 GET方法工作正常,我可以從android消耗沒有任何問題。但是,當涉及到POST請求時,我無法從android中使用它。
我已經測試了使用REST客戶端chrome插件的POST方法,它看起來像請求工作正常,我能夠達到該方法並執行任何代碼需要執行。以下證據:
請求數據:
請求響應:
下面的C#API:
[RoutePrefix("api/leads")]
public class LeadsController : ApiController
{
// GET: api/Leads/5
public List<Lead> Get(string matricula, int tipo)
{
List<Lead> leads = new List<Lead>();
//Fills the list
return leads;
}
[HttpPost]
// POST: api/Leads
public bool Post(int id, string usuario, string latitude, string longitude)
{
//Do stuff
return true;
}
}
最後,但並非最不重要,我是的java代碼使用對POST請求:
@Override
protected String doInBackground(String... strings) {
URL url = null;
try {
String newUrl = getNewUrl();
StringBuilder postData = new StringBuilder();
for (Map.Entry<String,Object> param : params.entrySet()) {
if (postData.length() != 0) postData.append('&');
postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
postData.append('=');
postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
}
url = new URL(newUrl);
byte[] postDataBytes = postData.toString().getBytes("UTF-8");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
conn.getOutputStream().write(postDataBytes);
int responseCode = conn.getResponseCode();
if(responseCode == HttpURLConnection.HTTP_OK){
server_response = readStream(conn.getInputStream());
}
} catch (MalformedURLException e) {
listener.onPostResponse(false, e.getMessage(), this.tipoAcesso);
} catch (UnsupportedEncodingException e) {
listener.onPostResponse(false, e.getMessage(), this.tipoAcesso);
} catch (ProtocolException e) {
listener.onPostResponse(false, e.getMessage(), this.tipoAcesso);
} catch (IOException e) {
listener.onPostResponse(false, e.getMessage(), this.tipoAcesso);
}
return null;
}
,該方法getNewUrl()的返回是在URL: 「https://cliente.teleatlantic.com.br/CheckinLeads/api/Leads/」。
的參數是: 「usuario = FERNANDOCHAVES &緯度= -46.6903502 &經度= -46.6903502 & ID = 265857」
我看了不知疲倦地在互聯網上(包括在此論壇)爲固定的方式我的問題與POST請求。但是我找到的解決方案都沒有解決我的問題。
我到目前爲止試過的東西:
1.添加「?」在POST請求中發送參數之前。
2.Append「/ CheckinLeads/api/Leads?」之前的參數。
3.更改代碼以使用HttpClient而不是HttpURLConnection。
4.將內容數據更改爲「text/json」。
5.使用HttpURLConnection和HttpClient的許多「準備使用」功能。
我是新來的java/android和任何幫助,將不勝感激。
我正在使用4.4 Android KitKat SDK版本24.
感謝您的關注!最好的祝福。
-----編輯-----
代碼不會崩潰。但是,當我檢查請求的HttpURLConnection.getResponseCode時,它顯示了404。但是,我發送的URL和參數與用於在REST客戶端中測試的URL和參數相同。
'我不能夠從android'究竟如何使用呢?究竟是什麼錯誤?它會崩潰嗎?返回錯誤的結果?返回錯誤?... –
它不會崩潰,只是沒有到達服務器。如果我檢查HttpUrlConnection.getResponseCode();它顯示我一個404.但請求的URL和參數是正確的。我看不到我錯過了什麼。 – Abner
可以從你的android https://cliente.teleatlantic.com.br/CheckinLeads/api/Leads?usuario=FERNANDOCHAVES&latitude=-46.6903502&longitude=-46.6903502&id=265857 內容類型調用下面靜態URL =一次「應用程序/ x-www-form-urlencoded「 –