JSONレスポンスを受け取るREST APIに本体としてのjsonデータをPOSTリクエストとして送信します。私はJsonObjectRequestを使用しています.JsonObjectRequestコンストラクタのjsonObjectを設定するとPOSTとしてリクエストが送信され、そうでなければGETとして送信されることがわかります。私は郵便配達員の要求を実行しようとしてもうまくいきますが、アンドロイドでは、エラー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
私はこれを以前試みました。同じエラー –