kotlin - Kotlin - 当json中不存在非空属性时,强制从json到类的反序列化失败?
问题描述
假设我们有这个类:
class Test(@SerializedName("Nullablefield")
val nullable: Int?,
@SerializedName("NonNullableField")
val nonNullable: Int)
我们收到这个json:
{
"Nullablefield": 3
}
如您所见,json 中缺少 NonNullableField,
当使用 Gson().fromJson 方法时,属性变为空(即使该属性被定义为非空)
我在执行此操作时阅读了有关 gson 使用不安全方法的信息。
在这种情况下,有没有办法使用 Gson 或任何其他库使反序列化过程失败?
我不想通过为该字段分配默认值来解决它。
解决方案
您可以使用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
)
推荐阅读
- finite-automata - 设计一个 FA 来接受 L,其中 L = 'a' 总是出现三倍的字符串
- c# - 使用 observable 按字母顺序排序数据
- java - NPE 很难从 logcat 中发现它似乎是 Arraylist 但应该设置每个项目
- docker - Docker 拒绝挂载 NFS 共享
- sql - Laravel Eloquent:选择一个字段等于另一个字段的记录
- google-apps-script - 继续接收 抱歉,无法删除所有未冻结的行
- angular - angular: 封装一个 Stepper 组件
- python - Python:为什么 for 循环在 join() 函数的中间?
- java - Spring WebClient - 如何处理错误场景
- python - 我的神经网络的准确性很差