Android使用Volley库发送POST请求返回400错误如何解决
HTTP 400 错误本质是客户端请求格式不符合服务端要求,服务端无法正常解析,按以下步骤逐一排查即可定位问题:
1. 先校验请求参数合法性
- 先打印你构造的
params完整JSON串,检查obserName变量是否为空、是否包含特殊字符,所有字段的拼写、大小写是否和接口要求完全一致(比如服务端要求deptCode驼峰,你写的deptcode全小写就会报错) - 确认字段类型是否匹配:你传的
deptcode、instCode等值都是数字类型,如果接口要求传字符串格式的数值,也会触发400 - 确认时间格式符合要求:你传的是带Z标识的ISO时间格式,需确认服务端是否支持,有没有要求转时间戳或者其他格式
2. 修正Volley请求头的错误写法
你当前在getHeaders中设置Content-Type的方式对JsonObjectRequest不生效,还可能和Volley默认配置冲突导致头信息异常,删掉getHeaders中Content-Type的配置,换成重写getBodyContentType方法即可:
@Override public String getBodyContentType() { return "application/json; charset=utf-8"; }
同时确认接口是否要求其他请求头,比如鉴权token、用户标识等,缺失必要头信息也会返回400。
3. 打印服务端返回的错误详情定位根因
400错误通常服务端会返回具体的错误说明,告诉你是哪个字段非法、参数缺失,在错误回调中添加日志打印返回体即可:
@Override public void onErrorResponse(VolleyError error) { VolleyLog.d("TAG", "Error: " + error.getMessage()); // 打印服务端返回的错误详情 if (error.networkResponse != null && error.networkResponse.data != null) { try { String errorBody = new String(error.networkResponse.data, "UTF-8"); Log.e("请求错误详情", errorBody); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } }
4. 其他常见排查点
- 确认请求URL无拼写错误、无多余空格或特殊字符,接口确实为POST请求类型
- 确认接口要求的传参方式是JSON请求体,若要求Form表单传参,你需要改用
StringRequest构造请求,不能用JsonObjectRequest传JSON参数
内容的提问来源于stack exchange,提问作者Abdullah AlShibli
相关产品推荐
相关产品推荐

