如何在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.
相关产品推荐
相关产品推荐

