使用OkHttp实现多表单文件上传时如何获取服务器响应
解决OkHttp上传文件后无法获取正确服务器响应的问题
问题出在你获取响应内容的方式上:直接调用responseObj.body().toString()得到的是ResponseBody对象的默认字符串表示(也就是你看到的okhttp3.internal.http.RealResponseBody@5ff7632),并非服务器返回的实际JSON内容。
正确获取响应内容的方法
需要使用ResponseBody提供的string()方法来读取响应体的文本内容,同时要注意正确关闭响应体避免资源泄漏:
修改你的响应处理代码:
// get server response if successful call if (responseObj.isSuccessful()) { try (ResponseBody responseBody = responseObj.body()) { if (responseBody != null) { response = responseBody.string(); } } catch (IOException e) { e.printStackTrace(); // 这里可以添加异常处理逻辑,比如提示用户获取响应失败 } }
关键说明
string()方法会将整个响应体的内容读取为字符串,适合你期望的JSON响应场景;- 使用
try-with-resources语法(Java 7+支持)可以自动关闭ResponseBody,避免OkHttp的资源泄漏问题; - 同步调用
execute()可能抛出IOException,必须添加异常捕获; - 如果响应体是大文件,建议使用
byteStream()或source()方法流式读取,避免内存溢出。
内容的提问来源于stack exchange,提问作者Rohitesh
相关产品推荐
相关产品推荐

