使用OkHttp发送POST请求后,如何获取服务器返回的响应体内容?
如何通过OkHttp获取服务器返回的完整响应内容?
嘿,我懂你的困扰——你已经成功用OkHttp发送了POST请求,也拿到了状态码200的响应,但目前只看到了Response对象的基础元数据(比如协议、状态码、URL这些),服务器实际返回的包含用户信息的JSON内容还没被提取出来对吧?
问题出在你只拿到了Response这个"容器",但没有读取里面的**响应体(ResponseBody)**内容。下面给你一步步解决的方法:
1. 读取完整的响应体字符串
OkHttp的Response对象本身只存储请求/响应的元数据,实际的返回内容存在response.body()里。你可以通过response.body().string()方法把它转换成字符串形式,就能看到服务器返回的完整JSON了。
不过要注意两个关键点:
- 一定要先检查请求是否成功(用
response.isSuccessful(),它会判断状态码在200-299之间) ResponseBody的流只能读取一次,所以如果后续还要使用响应内容,记得把它存到变量里,不要重复调用string()
2. 修改后的完整代码示例
我把你的代码修改了一下,加上读取响应体的逻辑,还用上了try-with-resources来自动关闭Response,避免资源泄漏:
final MediaType JSON = MediaType.get("application/json; charset=utf-8"); OkHttpClient client = new OkHttpClient(); RequestBody body = RequestBody.create(JSON, params); Request request = new Request.Builder() .url(url) .post(body) .build(); try (Response response = client.newCall(request).execute()) { // 先判断请求是否成功 if (!response.isSuccessful()) { throw new IOException("请求失败,状态码: " + response.code()); } // 读取完整的响应内容 String fullResponse = response.body().string(); System.out.println("服务器返回的完整内容: " + fullResponse); // 这里可以继续处理JSON内容 } catch (IOException e) { e.printStackTrace(); }
3. 解析JSON为Java对象(可选但实用)
如果不想直接处理字符串,想把JSON转换成Java对象来方便操作,可以用Gson或者Jackson这类JSON库。比如用Gson的话:
首先定义和服务器返回结构对应的实体类:
// 对应服务器返回的外层结构 public class ApiResponse { private MessageData message; // Getter和Setter方法 public MessageData getMessage() { return message; } public void setMessage(MessageData message) { this.message = message; } // 对应message字段的结构 public static class MessageData { private User user; private String message; private int code; // Getter和Setter方法 public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } // 对应user字段的结构 public static class User { private int id; private String name; // Getter和Setter方法 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } } }
然后在读取响应字符串后,用Gson解析:
// 先确保你已经引入了Gson依赖 Gson gson = new Gson(); ApiResponse responseObj = gson.fromJson(fullResponse, ApiResponse.class); // 现在可以直接获取数据了 System.out.println("用户ID: " + responseObj.getMessage().getUser().getId()); System.out.println("用户名: " + responseObj.getMessage().getUser().getName()); System.out.println("服务器提示: " + responseObj.getMessage().getMessage());
这样就能轻松获取服务器返回的所有数据啦!
内容的提问来源于stack exchange,提问作者daniel gon
相关产品推荐
相关产品推荐

