ktor - Kotlinx序列化MissingFieldException

标签 ktor kotlinx.serialization

我正在使用Ktor从Moshi转换为kotlinx序列化的过程,当我尝试提出获取数据的请求时,出现此错误

kotlinx.serialization.MissingFieldException: Field 'attachments' is required, but it was missing


这是有道理的,因为此特定响应不包含此字段
回应杰森
{
    "data": {
        "id": "1299418846990921728",
        "text": "This is a test"
    }
}
但是我的序列化类的attachments字段可为空(它仅在需要时才在响应中),因此它应该忽略它,我认为就像对Moshi所做的那样
@Serializable
data class ResponseData(
    val id: Long
    val attachments: Attachments?,
    val author_id: String?,
    val text: String
}
在我的Ktor客户端设置中,我将其设置为忽略未知键
private val _client: HttpClient = HttpClient(engine) {
    install(JsonFeature) {
        val json = Json {
            this.isLenient = true
            this.ignoreUnknownKeys = true
        }
        serializer = KotlinxSerializer(json)
    }
}
为什么仍然说该字段是必需的,即使它可以为空?

最佳答案

我想通了,即使您将某些内容标记为可为空,它仍然被认为是必需的。
为了使其真正成为可选,您需要给它提供一个默认值,例如,带有nullables的数据类看起来像这样

@Serializable
data class ResponseData(
    val id: Long
    val attachments: Attachments? = null,
    val author_id: String? = null,
    val text: String
}
一旦设置了值,该字段将变为可选字段,并且不会引发该异常

关于ktor - Kotlinx序列化MissingFieldException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64796913/

相关文章:

kotlin - 在 Ktor 中重定向到绝对 URL

java - 如何在 Kotlin Ktor 中运行 Cron 作业?

kotlinx 序列化类标记为 @Serializable 没有 .serializer() 扩展函数

json - 使用 kotlinx.serialization 将 json 对象属性反序列化为字符串

json - ktor 为某些数据类抛出 NoTransformationFoundException

kotlin - 无法使用 Ktor 提供静态内容

android kotlin multiplatform kotlinx.serialization 适用于调试但不适用于发布版本

android - NoClassDefFoundError kotlinx 序列化

kotlin - 如何在 ktor-client 中禁用重定向

json - kotlinx 序列化——进行多态子反序列化的最佳方式