【发布时间】:2016-08-19 08:18:35
【问题描述】:
我想向 REST api 发送一个以 json 数据为主体的 POST 请求,以接收 JSON 响应。我正在使用 JsonObjectRequest 并且我知道在 JsonObjectRequest 构造函数中设置一个 jsonObject 将请求作为 POST 发送,否则作为 GET 发送。我尝试在邮递员上执行请求,它工作正常,但在 android 上,它给了我错误 405(不允许方法)。 REST API 还要求我发送 Content-Type: application/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”
-
我之前尝试过。同样的错误
标签: android json rest http-headers android-volley