Send a DELETE Request using Volley (Android) to a REST Api with parameters?

谁说胖子不能爱 提交于 2020-01-02 05:36:11

问题


How do I send a DELETE Request using Volley (Android) to a REST Api with parameters like access_token and username. I have tried almost everything on Internet but still I am getting a 400 error Message. I have tried sending the same DELETE request using PostMan and it works perfectly fine.

Here is the Error: E/Volley﹕ [1112] BasicNetwork.performRequest: Unexpected response code 400 for http://myserverip/messages/2

and Here is the Java code that I am using:

String URI = "http://myserverip/messages/2";

JsonObjectRequest request = new  JsonObjectRequest(Request.Method.DELETE,URI,null,
                                    new Response.Listener<JSONObject>() {
                                        @Override
                                        public void onResponse(JSONObject response) {

Toast.makeText(contextm,response.toString(),Toast.LENGTH_SHORT).show();

                                        }
                                    },
                                    new Response.ErrorListener() {
                                        @Override
                                        public void onErrorResponse(VolleyError error) {


                                        }


                                    }){

                                @Override
                                public Map<String, String> getHeaders() throws AuthFailureError {
                                    Map<String, String> headers = super.getHeaders();

                                    if (headers == null
                                            || headers.equals(Collections.emptyMap())) {
                                        headers = new HashMap<String, String>();
                                    }

                                    headers.put("access_token", "access_token");
                                    headers.put("username", "username");


                                    return headers;
                                }
                            };

                            MyApp.getInstance().addToRequestQueue(request);

Might not be really useful but here is the working DELETE request preview from PostMan

  • DELETE /messages/1 HTTP/1.1
  • Host: serveripaddress
  • Cache-Control:no-cache
  • Content-Type: application/x-www-form-urlencoded

    access_token=SPAVYaJ7ea7LzdeQYrBTsIRssuGbVpJI8G9XSV0n&username=whit3hawks


回答1:


You can easily achieve this if you put the following instead of null in ... new JsonObjectRequest(Request.Method.DELETE,URI,null,new Response.Listener<JSONObject>() { ...

final JSONObject object = new JSONObject();

try {
    object.put("access_token", "SPAVYaJ7ea7LzdeQYrBTsIRssuGbVpJI8G9XSV0n");
    object.put("username", "whit3hawks");
} catch (Exception e) {
    e.printStackTrace();
}

So your Request should look like this: ... new JsonObjectRequest(Request.Method.DELETE,URI,object,new Response.Listener<JSONObject>() { ...

You posted a long time ago, but maybe someone else will need this some time.




回答2:


I am successfully sending headers in volley while using DELETE with this code:

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json");
return headers;

just tried it and works like a charm.

EDIT:

if you're using a Mac, try checking with Charles what exactly it is you are sending, on a PC you can try fiddler.

also, error 400 means 'Bad Input', so the server is either getting more info then it should, or less then he expects. and keep in mind that DELETE in Volley acts as a GET, make sure you are sending an empty body with the request.

hope that helped somehow.. happy coding



来源:https://stackoverflow.com/questions/28201328/send-a-delete-request-using-volley-android-to-a-rest-api-with-parameters

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!