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

如何将Java对象转为JSON作为OkHttp请求体发送?

解决方案:将ApolloRequestObj作为JSON请求体发送

要把初始化好的ApolloRequestObj对象作为请求负载发送,核心是把Java对象序列化为JSON字符串,再用OkHttp构建请求体完成发送。以下是两种常用序列化库的实现方案:

方法一:使用Jackson序列化

首先添加Jackson依赖(Maven示例):

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version> <!-- 建议使用最新稳定版本 -->
</dependency>

修改代码完成序列化与请求发送:

import com.fasterxml.jackson.databind.ObjectMapper;
import okhttp3.*;
import java.io.IOException;

// 初始化ObjectMapper(建议全局单例复用)
ObjectMapper objectMapper = new ObjectMapper();

try {
    // 将对象序列化为JSON字符串
    String json = objectMapper.writeValueAsString(obj);

    // 构建请求体(OkHttp 4.x+ 推荐用 MediaType.get 替代 parse)
    RequestBody requestBody = RequestBody.create(
        MediaType.get("application/json"),
        json
    );

    // 构建完整请求
    Request request = new Request.Builder()
        .url("你的远程接口地址")
        .post(requestBody)
        .header("Content-Type", "application/json")
        .header("Cache-Control", "no-cache")
        .build();

    // 发送请求并处理响应
    OkHttpClient client = new OkHttpClient();
    try (Response response = client.newCall(request).execute()) {
        if (!response.isSuccessful()) throw new IOException("请求失败,响应码:" + response.code());
        // 读取响应内容
        System.out.println(response.body().string());
    }
} catch (IOException e) {
    // 实际项目中建议替换为日志记录等合理的异常处理逻辑
    e.printStackTrace();
}

方法二:使用Gson序列化

添加Gson依赖(Maven示例):

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version> <!-- 建议使用最新稳定版本 -->
</dependency>

修改代码完成序列化与请求发送:

import com.google.gson.Gson;
import okhttp3.*;
import java.io.IOException;

// 初始化Gson(建议全局单例复用)
Gson gson = new Gson();

// 将对象序列化为JSON字符串
String json = gson.toJson(obj);

// 构建请求体
RequestBody requestBody = RequestBody.create(
    MediaType.get("application/json"),
    json
);

// 构建完整请求
Request request = new Request.Builder()
    .url("你的远程接口地址")
    .post(requestBody)
    .header("Content-Type", "application/json")
    .header("Cache-Control", "no-cache")
    .build();

// 发送请求并处理响应
OkHttpClient client = new OkHttpClient();
try (Response response = client.newCall(request).execute()) {
    if (!response.isSuccessful()) throw new IOException("请求失败,响应码:" + response.code());
    System.out.println(response.body().string());
} catch (IOException e) {
    e.printStackTrace();
}

关键注意事项

  • 确保ApolloRequestObj可被序列化:如果它是内部类,必须声明为static private class,否则序列化库无法正常处理非静态内部类。
  • OkHttp版本兼容:若使用OkHttp 3.x版本,MediaType.parse("application/json")是可用的;4.x及以上版本推荐使用MediaType.get。
  • 异常处理:实际项目中避免直接使用printStackTrace(),建议结合日志框架记录异常信息,或抛出业务异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:14:55