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

如何在OkHttp RequestBody中传递JSON对象调用外部API

解决OkHttp传递大JSON对象作为表单参数的问题

方案1:将JSON对象序列化为字符串后传递

如果后端期望接收application/x-www-form-urlencoded类型的表单,且某个字段的值为JSON内容,可直接将JSON对象序列化为字符串,通过FormBody.add()传递:

  1. 先把JSON对象转成字符串(以org.json.JSONObject为例):
JSONObject jsonObject = new JSONObject();
// 填充你的大JSON内容...

// 序列化为字符串
String jsonString = jsonObject.toString();
  1. 构建表单并发起请求:
RequestBody formBody = new FormBody.Builder()
    .add("something", jsonString)
    .build();

Request request = new Request.Builder()
    .url(BASE_URL + "/users")
    .post(formBody)
    .build();

Call call = client.newCall(request);
Response response = call.execute();

注意:需要和后端确认,他们能正确解析该字段的JSON字符串内容。

方案2:直接发送JSON格式的请求体(推荐,若后端支持)

如果后端接口支持接收application/json类型的请求体,没必要用表单格式,直接将整个JSON作为请求体发送,更适合大体积JSON场景:

// 将JSON对象转为字符串
String jsonString = jsonObject.toString();

// 构建JSON类型的请求体
RequestBody requestBody = RequestBody.create(
    jsonString,
    MediaType.parse("application/json; charset=utf-8")
);

// 发起请求
Request request = new Request.Builder()
    .url(BASE_URL + "/users")
    .post(requestBody)
    .build();

Call call = client.newCall(request);
Response response = call.execute();

这种方式避免了表单编码的额外开销,传输大JSON时效率更高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:35:00