response.body().string()的坑坑坑!!!

本文记录了一次因将response.body().string()错误地写为response.body().toString()而导致的问题排查经历。这一错误导致返回的数据被误解为对象引用而非实际响应内容。
一不小心 浪费了2个小时 
response.body().string()

这个东西明明就看到过是string string为啥还是写成了toString()...

写成了response.body().toString()后打印出来的就是okhttp3.internal.http.RealResponseBody@815f248这样的数据!!!

在 Java 中,若后续一直使用 `response.body().string()` 而非 `String responseData = response.body().string();` ,会出现 `IllegalStateException` 异常。这是因为 `response.body().string()` 方法会消费响应体的内容,它会读取输入流中的所有数据并将其转换为字符串,一旦读取完成,输入流就会被关闭。 当再次调用 `response.body().string()` 时,由于输入流已经关闭,就无法再次读取数据,进而抛出 `IllegalStateException` 异常。以下是示例代码: ```java import okhttp3.*; import java.io.IOException; public class OkHttpExample { public static void main(String[] args) { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://example.com") .build(); try (Response response = client.newCall(request).execute()) { // 第一次调用 response.body().string() System.out.println(response.body().string()); // 再次调用 response.body().string(),会抛出 IllegalStateException System.out.println(response.body().string()); } catch (IOException e) { e.printStackTrace(); } } } ``` 若使用 `String responseData = response.body().string();` ,响应体的内容会被存储在 `responseData` 变量中,后续可多次使用该变量,不会出现异常: ```java import okhttp3.*; import java.io.IOException; public class OkHttpExample { public static void main(String[] args) { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://example.com") .build(); try (Response response = client.newCall(request).execute()) { String responseData = response.body().string(); // 第一次使用响应数据 System.out.println(responseData); // 再次使用响应数据 System.out.println(responseData); } catch (IOException e) { e.printStackTrace(); } } } ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值