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

如何在okHttp3中通过‘--data {json}’传递参数?

OkHttp3 传递 JSON 请求体的正确方式

你示例里把 JSON 数据塞请求头的data字段是错的,完全没必要这么做。

--data {json}对应的是 curl 里POST 请求的请求体(RequestBody),不是请求头。请求头是用来传递请求元数据的(比如认证信息、内容类型),实际的业务数据要放到请求体里才符合 HTTP 规范。

正确的实现步骤:

  • 准备好你的 JSON 字符串
  • 把 JSON 字符串包装成RequestBody,同时指定正确的Content-Type
  • 通过Request.Builder的.post()方法把请求体绑定到请求上

完整示例代码:

// 替换成你的实际 JSON 数据
String jsonPayload = "{\"username\":\"test\",\"password\":\"123456\"}";

// 创建请求体,指定媒体类型为 JSON
RequestBody requestBody = RequestBody.create(
    jsonPayload,
    MediaType.parse("application/json; charset=utf-8")
);

// 构建请求
Request request = new Request.Builder()
    .url("你的接口地址")
    .header("Content-Type", "application/json; charset=utf-8")
    .post(requestBody) // 核心:把请求体通过 post 方法传入,而非请求头
    .build();

// 后续执行请求
OkHttpClient client = new OkHttpClient();
try (Response response = client.newCall(request).execute()) {
    if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
    // 处理响应结果
    System.out.println(response.body().string());
}

如果是使用 OkHttp 4.x 及以上版本,MediaType.parse()可以换成更简洁的写法:

RequestBody requestBody = RequestBody.create(
    jsonPayload,
    MediaType.get("application/json; charset=utf-8")
);

总结:别往请求头塞业务数据,把 JSON 放到请求体里,用post()方法传递才是对应 curl --data的正确做法。

内容的提问来源于stack exchange,提问作者Ricky V.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:25:19