You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 11:42:00