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

Retrofit2接收Byte类型图片响应抛出JsonSyntaxException异常如何解决

问题根因

你当前的Retrofit实例全局配置了GsonConverterFactory,默认会将所有接口的响应交给Gson解析为JSON结构,但你请求的图片接口返回的是二进制字节流,不属于合法JSON格式,Gson解析非JSON内容时就会触发JsonSyntaxException异常。

解决方案

方案1(推荐):调整图片接口的返回类型为ResponseBody

不需要修改现有Retrofit全局配置,仅修改对应图片接口的定义即可,ResponseBody类型的响应会跳过Gson解析直接返回原始字节流:

interface ApplicationAPI {
    // 原有JSON接口配置保持不变
    @GET("你的图片接口路径")
    suspend fun getImage(): Response<ResponseBody>
}

接口调用后直接从ResponseBody读取字节流处理:

val imageResp = api.getImage()
if (imageResp.isSuccessful) {
    val imageByteData = imageResp.body()?.bytes()
    // 后续可将字节流转为Bitmap、存储到本地或加载到ImageView
}

方案2:排查异常配置项

如果修改返回类型后仍报错,可检查以下配置:

  • 确认你定义的图片接口返回值没有误写为自定义JSON实体类
  • 检查MyInterceptor拦截器是否误修改了图片响应的Content-Type,如果被强制改为application/json会强制触发Gson解析
  • 不要将图片接口的响应报文打印到日志中,二进制流打印会导致内容乱码,可能触发解析异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 04:24:05