简体   繁体   中英

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

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

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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM