我正在使用Ktor从Moshi转换为kotlinx序列化,当我尝试提出获取数据的请求时,出现此错误
kotlinx.serialization.MissingFieldException:字段“附件”为 是必需的,但它丢失了
这很有意义,因为此特定响应不包含此字段
响应Json
{
"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)
}
}
为什么仍然说该字段是必需的,即使它可以为空?
答案 0 :(得分:2)
我想通了,即使您将某些内容标记为可为空,它仍然被认为是必需的。
要使其真正成为可选内容,您需要给它提供一个默认值,例如,带有可空值的数据类看起来像这样
@Serializable
data class ResponseData(
val id: Long
val attachments: Attachments? = null,
val author_id: String? = null,
val text: String
}
一旦设置了值,字段将变为可选,并且不会引发该异常