gpt4 book ai didi

java - 使用Gson和Kotlin的零安全网络响应

转载 作者:行者123 更新时间:2023-12-02 12:48:27 25 4
gpt4 key购买 nike

假设您有这样的数据类pojo,它表示典型的基于gson的响应表示形式来自服务器。

data class User(
@field:SerializedName("id")
val id: String,
@field:SerializedName("name")
val name: String,
@field:SerializedName("user_phone")
val phone: String?)

id 名称字段为必填字段, 电话字段为可选字段
因此,此模型期望使用适当的json,例如:
{
"id": "someHash",
"name": "John Snow"
}

有时服务器可以像这样发送json:
{
"id": "someHash"
}

不幸的是,这样的json被成功解析,没有任何错误,因为gson使用了不安全的反射并且是为Java编写的。因此,结果将是损坏的kotlin模型,其中 null 存储在 非null 字段中

我想在json-deserialization层上对此模型提供验证,因为最好是在那里立即收到错误,而不是在应用程序的任何其他部分接收错误,因为该错误期望非null字段。
我正在寻找解决此问题的任何方法。

当然,您可以为每个模型提供一些明确的验证功能,例如
fun User.validate() {
if (id == null) throw JsonParseException("'id' is null!")
if (name == null) throw JsonParseException("'name' is null!")
}

并在任何地方手动调用它,但是会产生很多样板代码,我们一直在努力避免这样做。并且ide发出警告,因为它认为不必要的null检查

最佳答案

您可以使用自定义的JsonDeserializer来验证由@RequiredField之类的注释的字段,并在该字段为null时自动引发异常。

怎么做的,您可以在这里找到:Gson optional and required fields

关于java - 使用Gson和Kotlin的零安全网络响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47283216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com