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

Retrofit2.6.2日志拦截器显示完整响应但response body返回null问题

问题根因定位&解决方案

从你给出的日志可以直接定位到核心问题,按优先级修复即可:

  • 1、修复字段类型不匹配问题
    你打印的响应日志里actionType实际返回的是1.0(浮点型),但你的BannerRes实体类中把actionType定义成了Int?类型,Gson反序列化时类型不匹配,虽然你开了setLenient()不会抛出崩溃,但会导致后续字段反序列化异常。
    修复方案:把actionType的类型改为Double?或者Float?即可,不要用Int接收浮点型返回值。

  • 2、补全DataClass默认值
    你当前的BannerRes所有字段都没有设置默认值,Kotlin不会自动生成无参构造函数,Gson反序列化Kotlin数据类时如果没有无参构造,会出现字段赋值失败的问题,这也是你明明转Json能看到完整字段,直接访问却返回null的核心原因。
    修复方案:给BannerRes的所有字段加上默认值,示例如下:

data class BannerRes(
    @SerializedName("actionType")
    val actionType: Double? = null,
    @SerializedName("actionUrl")
    val actionUrl: String? = null,
    @SerializedName("activity")
    val activity: String? = null,
    @SerializedName("error")
    val error: Boolean? = null,
    @SerializedName("id")
    val id: String? = null,
    @SerializedName("imageUrl")
    val imageUrl: String? = null,
    @SerializedName("msg")
    val msg: String? = null,
    @SerializedName("visible")
    val visible: Boolean? = null
)
  • 3、可选优化&检查项
    • 你的Retrofit配置里ConverterFactory添加顺序不符合规范,ScalarsConverterFactory是用来处理字符串、基础类型等简单返回值的,需要放在自定义Bean的转换器前面,调整顺序如下:
      return Retrofit.Builder()
          .baseUrl(BuildConfig.BASE_URL)
          .addConverterFactory(ScalarsConverterFactory.create()) // 移到Gson前面
          .addConverterFactory(GsonConverterFactory.create(gson))
          .client(okHttpClient)
          .build()
          .create(MyApi::class.java)
      
    • 如果修复以上问题还是异常,检查是否开启了代码混淆,给BannerRes加上@Keep注解,避免混淆时移除实体类字段和注解。

修复完以上问题后即可正常访问res.body()?.msg字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:36:04