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

Retrofit使用ApiModel<Unit>报错,自定义JsonAdapter及Converter无效求助

解决方案

1. 修正自定义UnitJsonAdapter

修复Adapter的方法签名与实现,使其符合Moshi的要求:

class UnitJsonAdapter {

    @ToJson
    fun toJson(writer: JsonWriter, unit: Unit) {
        writer.nullValue() // 可根据服务器预期格式调整,比如输出空对象{}
    }

    @FromJson
    fun fromJson(reader: JsonReader): Unit {
        reader.skipValue() // 跳过当前JSON值,避免中断整体解析流程
        return Unit
    }
}

关键修正点:

  • toJson方法新增Unit类型参数(Moshi要求@ToJson方法必须接收目标类型作为参数)
  • 用skipValue()替代原代码的reader.close(),防止中断整个JSON解析链路

2. 注册Adapter到Moshi实例

创建Moshi时添加该自定义Adapter:

val moshi = Moshi.Builder()
    .add(UnitJsonAdapter())
    .build()

3. 配置Retrofit使用该Moshi实例

移除之前无效的UnitConverterFactory(它仅处理直接返回Unit的接口方法,无法处理嵌套在ApiModel<Unit>中的场景),改用配置好的Moshi实例:

val retrofit = Retrofit.Builder()
    .baseUrl("你的接口BaseUrl")
    .addConverterFactory(MoshiConverterFactory.create(moshi).asLenient())
    .build()

4. 适配ApiModel的字段兼容性(可选)

如果服务器返回的result字段可能为null或不存在,建议将ApiModel的result改为可空类型,避免解析失败:

@JsonClass(generateAdapter = true)
data class ApiModel<T>(
    val result: T?, // 改为可空类型
    val error: Error
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:15:17