首页 > 解决方案 > Kotlin - 当json中不存在非空属性时,强制从json到类的反序列化失败?

问题描述

假设我们有这个类:

  class Test(@SerializedName("Nullablefield")
             val nullable: Int?,
             @SerializedName("NonNullableField")
             val nonNullable: Int)

我们收到这个json:

{
    "Nullablefield": 3
}

如您所见,json 中缺少 NonNullableField,

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

我在执行此操作时阅读了有关 gson 使用不安全方法的信息。

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

我不想通过为该字段分配默认值来解决它。

标签: kotlingson

解决方案


您可以使用Moshi库来解析 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
)

推荐阅读