我想發送帶有json數據的POST請求作爲正文到REST api的POST請求接收JSON響應。我使用JsonObjectRequest,我明白在JsonObjectRequest構造函數中設置jsonObject會將請求作爲POST發送,否則作爲GET發送。我試圖在郵遞員上執行請求,它工作正常,但在Android上,它給了我錯誤405(方法不允許)。 REST API還要求我發送Content-Type: application/json
作爲標題。這裏是我的代碼:volley POST json對象並從RESTful API接收json對象
JsonObjectRequest req = new JsonObjectRequest(LOGIN_ENDPOINT , payload,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
pDialog.dismiss();
new SweetAlertDialog(LoginActivity.this, SweetAlertDialog.SUCCESS_TYPE)
.setTitleText("Response")
.setContentText(response.toString())
.setConfirmText("Ok")
.setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sweetAlertDialog) {
sweetAlertDialog.dismiss();
}
})
.show();
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
pDialog.dismiss();
new SweetAlertDialog(LoginActivity.this, SweetAlertDialog.ERROR_TYPE)
.setTitleText("Error")
.setContentText(VolleyErrors.getVolleyErrorMessages(error, LoginActivity.this))
.setConfirmText("Ok")
.setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sweetAlertDialog) {
sweetAlertDialog.dismiss();
}
})
.show();
}
}){
@Override
public byte[] getBody() {
return payload.toString().getBytes();
}
@Override
public String getBodyContentType() {
return "application/json; charset=utf-8";
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String,String> params = new HashMap<String, String>();
params.put("Content-Type","application/json; charset=utf-8");
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(LoginActivity.this);
requestQueue.add(req);
嘗試在你的構造函數中添加「Request.Method.POST」 – cuoka
我曾嘗試過。同樣的錯誤 –