Kotlin-当json中不存在非null属性时,强制从json反序列化到类失败?

Kotlin-当json中不存在非null属性时,强制从json反序列化到类失败?,kotlin,gson,Kotlin,Gson,假设我们有这个类: class Test(@SerializedName("Nullablefield") val nullable: Int?, @SerializedName("NonNullableField") val nonNullable: Int) 我们收到了这个json: { "Nullablefield": 3 } 如您所见,json中缺少NonNullableField 使用Gson

假设我们有这个类:

  class Test(@SerializedName("Nullablefield")
             val nullable: Int?,
             @SerializedName("NonNullableField")
             val nonNullable: Int)
我们收到了这个json:

{
    "Nullablefield": 3
}
如您所见,json中缺少NonNullableField

使用Gson().fromJson方法时,该属性变为null(即使该属性定义为非null)

我在做这件事时读到了关于gson使用不安全方法的信息

在这种情况下,使用Gson或任何其他库是否有办法使反序列化过程失败

我不想通过为字段指定默认值来解决这个问题。

您可以使用库解析json

import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
import com.squareup.moshi.Moshi

fun main() {
    val json = """
{
    "Nullablefield": 3
}        
    """.trimIndent()
    val moshi = Moshi.Builder().build()
    val adapter = moshi.adapter(Test::class.java)
    val test = adapter.fromJson(json)//will crash
    println(test)
}

@JsonClass(generateAdapter = true)
data class Test(
    @Json(name = "Nullablefield")
    val nullable: Int?,
    @Json(name = "NonNullableField")
    val nonNullable: Int
)

尝试设置默认值value@AlexandrKolesnik我不想要默认值。我只是希望它失败,我的建议是尝试另一个反序列化库,例如一个实际上是用Kotlin支持编写的库(Moshi,Jackson)。编辑:我实际上使用了Jackson,我认为您请求的行为是默认的。无论如何,我会给moshi一个机会,它是非常新的,我认为它是用Kotlin写的(或者至少有广泛的Kotlin支持),但对你想要的行为一无所知。