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

