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
相关产品推荐
相关产品推荐

