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

使用OkHttp请求时持续报错:请求Content-Type需为application/json怎么办?

问题解决:OkHttp设置Content-Type仍报错的处理

你的问题出在重复设置Content-Type头,且手动添加的头带了服务器不认可的后缀:

  • 你通过RequestBody.create(jsonBody, JsonType)已经指定了application/json的MediaType,OkHttp会自动为请求添加正确的Content-Type: application/json头。
  • 但你又手动调用addHeader添加了Content-Type: application/json; charset=utf-8,这会导致请求头中出现重复的Content-Type(或被覆盖成带后缀的版本),而服务器只接受严格的application/json值,因此返回错误。

解决步骤

直接移除手动添加的Content-Type头即可,修改后的代码如下:

int id = 208;
MediaType JsonType = MediaType.parse("application/json");
OkHttpClient client = new OkHttpClient();
String jsonBody = "{\"params\":[\"wandelnet\"," + id + "]}";
RequestBody body = RequestBody.create(jsonBody, JsonType);
Request request = new Request.Builder()
        .url( "https://wandelnet.api.routemaker.nl/routemaker/getPublishedRoute")
        .post(body)
        .addHeader( "Accept", "application/json")
        .build();
Response response = client.newCall(request).execute();

如果需要指定字符集,也可以将MediaType改为带charset的版本,同时保持不手动添加头:

MediaType JsonType = MediaType.parse("application/json; charset=utf-8");

这样OkHttp自动生成的Content-Type头会包含字符集,部分服务器也能正常识别。

验证逻辑

Postman中正常运行的请求,其Content-Type头应该是严格的application/json(未添加charset后缀),和修改后OkHttp自动生成的请求头一致,因此能通过服务器校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:50:25