使用Volley(Android)发送带有参数的REST Api的DELETE请求?

时间:2015-01-28 20:02:44

标签: android rest android-volley

如何使用Volley(Android)向REST Api发送带有access_token和username等参数的DELETE请求。我在互联网上尝试了几乎所有的东西,但我仍然收到400错误消息。 我尝试使用PostMan发送相同的DELETE请求,它完全正常。

以下是错误: E / Volley:[1112] BasicNetwork.performRequest:http://myserverip/messages/2的意外响应代码400

以下是我正在使用的Java代码:

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);

可能不是很有用,但这是来自 PostMan

的DELETE请求预览
  • DELETE / messages / 1 HTTP / 1.1
  • 主持人:serveripaddress
  • 缓存控制:无缓存
  • 内容类型:application / x-www-form-urlencoded

    =的access_token&SPAVYaJ7ea7LzdeQYrBTsIRssuGbVpJI8G9XSV0n放大器;用户名= whit3hawks

2 个答案:

答案 0 :(得分:2)

如果您在null

中添加以下内容而不是... 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();
}

因此,您的请求应如下所示: ... new JsonObjectRequest(Request.Method.DELETE,URI,object,new Response.Listener<JSONObject>() { ...

很久以前你发布了,但也许其他人需要这个时间。

答案 1 :(得分:0)

我在使用DELETE时使用此代码成功发送了标题:

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

尝试过它并且像魅力一样。

编辑:

如果您使用的是Mac,请尝试查看Charles究竟发送的内容, 在PC上你可以试试小提琴。

另外,错误400意味着“输入错误”,因此服务器要么获得更多信息,要么应该获得更多信息,或者更少,然后他预期。 并且请记住,排球中的DELETE充当GET,请确保您发送了一个带有请求的空体。

希望以某种方式帮助...快乐编码