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

Android OkHttp3 POST请求因Content-Type不符致400错误求助

解决方案:OkHttp POST请求Content-Type匹配问题

核心问题

你的服务器代码中使用严格全等判断req.headers['content-type'] === 'application/json'验证请求头,但Android端设置的MediaType是application/json; charset=utf-8,导致请求头里的Content-Type带了charset参数,服务器判定不匹配,返回400错误。

修复步骤

1. 修正Android端MediaType声明

把带charset的MediaType改为纯application/json,确保请求头与服务器判断逻辑一致:

RequestBody requestBody = RequestBody.create(
        jsonObject.toString(),
        MediaType.parse("application/json")
);

或者使用OkHttp内置常量更规范:

RequestBody requestBody = RequestBody.create(
        jsonObject.toString(),
        MediaType.get("application/json")
);

2. 修复Response.body().string()重复调用问题

response.body().string()只能调用一次,因为流会被直接消耗,第二次调用会返回空字符串。修改代码复用已获取的响应内容:

String responseBody = response.body().string();
Log.d("NetworkRequest", "Response Body: " + responseBody);
if (response.isSuccessful()) {
    Log.d("NetworkRequest", "POST was correct");
    Log.d("NetworkRequest", responseBody); // 直接使用已获取的responseBody
} else {
    Log.e("NetworkRequest", "something went wrong");
}

额外优化建议

  • 优先使用异步请求避免主线程阻塞:
    Android主线程不允许同步网络请求,建议切回enqueue()异步方式,防止ANR:
client.newCall(postRequest).enqueue(new Callback() {
    @Override
    public void onFailure(@NonNull Call call, @NonNull IOException e) {
        Log.e("NetworkRequest", "请求失败", e);
    }

    @Override
    public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
        String responseBody = response.body().string();
        Log.d("NetworkRequest", "状态码: "+response.code());
        Log.d("NetworkRequest", "响应内容: " + responseBody);
        if (response.isSuccessful()) {
            Log.d("NetworkRequest", "POST请求成功");
        } else {
            Log.e("NetworkRequest", "请求出错");
        }
    }
});
  • 优化服务器端Content-Type判断逻辑:
    服务器可以放宽判断条件,检查Content-Type是否包含application/json,提升兼容性:
// 替换原有严格全等判断
if (req.headers['content-type']?.includes('application/json')) {
    // 原有解析逻辑
}

内容的提问来源于stack exchange,提问作者Alberto Palladipelo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:24:55