BUG解决要点
@POST + @Body必须写NetworkResponse<T>必须是@Serializable data classAuth必须@Serializable不要用 sealed / Any
哪怕 Auth 是@Serializable,只要NetworkResponse有下面任意一条,就一定失败:
- ❌ 没有
@Serializable - ❌ 是
sealed class - ❌ 是
open class - ❌ 有
Any/Map<String, Any> - ❌ 泛型
T没有限定 - ❌ 有自定义构造逻辑
Retrofit 会在创建接口代理时直接抛这个异常。
gradle(非常关键,很多人漏)
js
体验AI代码助手
代码解读
复制代码
dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3") implementation("com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0") }
js
体验AI代码助手
代码解读
复制代码
plugins { id("org.jetbrains.kotlin.plugin.serialization") }
代码示例
如果是Body的JSON请求,必须添加**@Body**
kotlin
体验AI代码助手
代码解读
复制代码
interface AuthService { @POST("login/password") suspend fun loginByPassword( @Body params: Map<String, String> ): NetworkResponse<Auth> }
kotlin
体验AI代码助手
代码解读
复制代码
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
体验AI代码助手
代码解读
复制代码
import kotlinx.serialization.Serializable @Serializable data class Auth( val token: String, val refreshToken: String, val expire: Long )
根因是kotlinx.serialization 无法为 NetworkResponse 生成 Serializer
原文:https://juejin.cn/post/7584758215701332006