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

OkHttp中response.body()的.toString()与.string()方法有何区别?

为什么response.body()!!.string()和response.body().toString()的输出不一样?

这个问题我之前帮好几个开发者排查过,本质是OkHttp里ResponseBody的两个方法完全不是一回事儿,咱们拆开说:

1. response.body()!!.string():获取响应的实际内容

  • 这个方法是专门用来读取HTTP响应体的文本内容的,它会把服务器返回的字节流(比如JSON、HTML或者普通文本)转换成字符串。
  • 注意:这个方法只能调用一次,因为它会把响应体的流读完并关闭,第二次调用就会抛出异常,这点要特别注意!
  • 你看到的正确JSON输出,就是这个方法帮你把服务器返回的原始数据解析成了可读的字符串。

2. response.body().toString():获取对象的默认字符串表示

  • 这个方法其实是继承自Java的Object类的默认toString()实现,它的作用是返回对象的内存地址标识,格式一般是类名@哈希码,也就是你看到的okhttp3.ResponseBody$1@c626d25。
  • 它根本不会去读取响应体的内容,只是告诉你这个ResponseBody对象在内存里的“身份标识”,完全不是你要的响应内容。

简单总结一下:前者是读取响应内容的业务方法,后者是Java对象的通用标识方法,完全是两个维度的东西。如果要获取响应体的文本,一定要用string()(或者针对字节的bytes()方法),绝对不要用toString()。

内容的提问来源于stack exchange,提问作者Tony Sherman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:57:28