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

