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

使用OkHttp发送JSON请求时服务端不识别类型返回404问题求助

问题根因
  • 核心错误是构造好的JSON请求体未被实际使用,反而传入了空的表单格式请求体,服务端无法匹配对应接口的参数格式要求,因此返回404状态码。
  • 原代码中RequestBody.create(json, MediaType.parse("application/json; charset=utf-8"));这行的返回值没有赋值给变量直接被丢弃,后续请求使用的是空的FormBody,和预期发送JSON的逻辑完全不符。
修正后的代码
private final OkHttpClient client = new OkHttpClient();

JSONObject jsonObj = new JSONObject();

try {
    jsonObj.put("imei",number);
    jsonObj.put("longitude", number);
    jsonObj.put("latitude", number);
    jsonObj.put("speed", number);
    jsonObj.put("battery", number);
    jsonObj.put("date", date);
    jsonObj.put("error", number);
    jsonObj.put("acceleroVal", number);
    jsonObj.put("apn", string);
} catch (JSONException e) {
    e.printStackTrace();
}
String json = jsonObj.toString();
// 保留JSON请求体并赋值给变量
// 若使用OkHttp 4.x版本,参数顺序需调整为RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json)
RequestBody jsonBody = RequestBody.create(json, MediaType.parse("application/json; charset=utf-8"));

Request request = new Request.Builder()
        .url("http://xxxx.com:2000/api/xxx")
        // 传入JSON请求体,删除原有无用的空FormBody
        .put(jsonBody)
        // 如果服务端要求POST请求,把上面的put替换为post即可:.post(jsonBody)
        .build();

client.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(@NonNull Call call, @NonNull IOException e) {
        e.printStackTrace();
    }

    @Override
    public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
        if(response.isSuccessful()) {
            ResponseBody responseBody = response.body();
            // 此处可处理服务端返回的响应内容
        }
    }
});
额外排查建议
  • 确认服务端接口接受的请求方法是PUT还是POST,若接口声明为POST,把.put(jsonBody)替换为.post(jsonBody)即可。
  • 若修改后仍返回404,检查请求URL的域名、端口、路径是否完全和服务端提供的接口地址一致,注意大小写、路径后缀是否匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:30:01