Unable to create converter for xxx.NetworkResponse<Auth> for method AuthService

BUG解决要点

  • @POST + @Body 必须写

  • NetworkResponse<T> 必须是 @Serializable data class

  • Auth 必须 @Serializable

  • 不要用 sealed / Any

哪怕 Auth 是 @Serializable,只要 NetworkResponse 有下面任意一条,就一定失败:

  • ❌ 没有 @Serializable
  • ❌ 是 sealed class
  • ❌ 是 open class
  • ❌ 有 Any / Map<String, Any>
  • ❌ 泛型 T 没有限定
  • ❌ 有自定义构造逻辑

Retrofit 会在创建接口代理时直接抛这个异常。

gradle(非常关键,很多人漏)

js 复制代码
dependencies {
    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3")
    implementation("com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0")
}
js 复制代码
plugins {
    id("org.jetbrains.kotlin.plugin.serialization")
}

代码示例

如果是Body的JSON请求,必须添加**@Body**

kotlin 复制代码
interface AuthService {

    @POST("login/password")
    suspend fun loginByPassword(
        @Body params: Map<String, String>
    ): NetworkResponse<Auth>
}
kotlin 复制代码
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class NetworkResponse<T>(
    @SerialName("code")
    val code: Int,

    @SerialName("message")
    val message: String,

    @SerialName("data")
    val data: T? = null
)
kotlin 复制代码
import kotlinx.serialization.Serializable

@Serializable
data class Auth(
    val token: String,
    val refreshToken: String,
    val expire: Long
)

根因是 kotlinx.serialization 无法为 NetworkResponse 生成 Serializer

相关推荐
雨中飘荡的记忆1 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
炫饭第一名2 小时前
速通Canvas指北🦮——基础入门篇
前端·javascript·程序员
王晓枫2 小时前
flutter接入三方库运行报错:Error running pod install
前端·flutter
符方昊2 小时前
React 19 对比 React 16 新特性解析
前端·react.js
ssshooter2 小时前
又被 Safari 差异坑了:textContent 拿到的值居然没换行?
前端
开心就好20252 小时前
UniApp开发应用多平台上架全流程:H5小程序iOS和Android
后端·ios
曲折3 小时前
Cesium-气象要素PNG色斑图叠加
前端·cesium
悟空码字3 小时前
告别“屎山代码”:AI 代码整洁器让老项目重获新生
后端·aigc·ai编程
Forever7_3 小时前
Electron 淘汰!新的桌面端框架 更强大、更轻量化
前端·vue.js
小码哥_常3 小时前
大厂不宠@Transactional,背后藏着啥秘密?
后端