Android中使用Volley如何发送整数列表作为请求体
问题原因
- 核心错误是使用了
Request.Method.GET作为请求方法:GET请求的规范是不携带请求体的,绝大多数服务端框架(包括抛出HttpMessageNotReadableException的常见框架如Spring)默认不会解析GET请求的请求体内容,自然就会抛出「Required request body is missing」的错误。 - 你用Postman测试时默认选择了POST方法携带JSON请求体,所以可以正常调用接口,而代码里用了GET方法,二者逻辑不匹配。
修复方案
- 把请求方法替换为
Request.Method.POST,和Postman的测试逻辑对齐即可:
// 仅修改请求方法为POST即可 JsonArrayRequest request = new JsonArrayRequest(Request.Method.POST, url, myIntegerJsonArray, new Response.Listener<JSONArray>() { @Override public void onResponse(JSONArray response) { //... do stuff here } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { error.printStackTrace(); } });
- 如果你的接口确实要求使用GET方法传整数列表,就不能用请求体传参,需要把整数列表拼接成URL查询参数(比如
myurl?ids=1&ids=3&ids=4或者myurl?ids=1,3,4),服务端从查询参数中取值即可。
额外注意事项
如果你修改为POST后还是报错,可以手动给请求设置Content-Type为application/json,重写getHeaders方法即可:
@Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String, String> headers = new HashMap<>(); headers.put("Content-Type", "application/json; charset=utf-8"); return headers; }
内容的提问来源于stack exchange,提问作者craftdeer
相关产品推荐
相关产品推荐

