Tag: kotlin json

使用Gson和Kotlin进行无漏网络响应

假设你有这样的数据类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使用不安全的reflection ,并为Java编写。 所以作为结果将有损坏kotlin模型与空值存储在非空字段 我想在json反序列化层上为这个模型提供validation,因为最好是在那里接收一个错误,而不是在应用程序的任何其他部分,这个部分需要非空字段。 我正在寻找这个问题的任何consize解决方案。 当然,你可以为每个模型提供一些明确的validationfunction fun User.validate() { if (id == null) throw JsonParseException(“‘id’ is null!”) if (name == null) throw JsonParseException(“‘name’ is […]

在通用属性解串器中包装所有标准和自定义Jackson解串器

我正在使用杰克逊2.8并期待包装所有标准/自定义反序列化器在一个标准的包装反序列化,以便对每个属性的每个反序列化的值实例做一些后处理。 为了做到这一点,我分类了BeanDeserializerModifier ,以便将基础JsonDeserializer和给定属性类型的相应JavaType传递给JsonDeserializer的子类, StdJsonDeserializer然后调用该基本反序列化器并对结果值实例执行各种操作。 在反序列化过程中,我得到以下错误: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.lindisfarne.MundaneDataClass: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?) 如果没有BeanDeserializerModifier ,那么这个操作当然会工作得很好 – 这显然我得到了一个不正确或不完整的反序列化器。 我怎样才能得到正确的解串器给定的类型? 完整的Kotlin代码重现以下问题: package com.lindisfarne import com.fasterxml.jackson.core.JsonParser import com.fasterxml.jackson.databind.* import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier import com.fasterxml.jackson.databind.deser.std.StdDeserializer import com.fasterxml.jackson.module.kotlin.KotlinModule import com.fasterxml.jackson.module.kotlin.readValue class […]

Firebase映射到Kotlin-Object不起作用

我的问题是,对象“财务”的价值不会自动获取… 我的数据库屏幕截图 包含财务对象的人对象: @PaperParcel open class Person(@PropertyName("Name") var name: String, @PropertyName("Finanzen") var finances: Finances): PaperParcelable { constructor() : this("", Finances()) companion object { val CREATOR = PaperParcelPerson.CREATOR } } 没有获取的财务 – 对象: @PaperParcel open class Finances(@PropertyName("Anspruch") var credit: Double, @PropertyName("Schulden") var debts: Double, @PropertyName("Shisha") var shisha: Double, @PropertyName("Strafe") var fines: Double ): PaperParcelable { constructor() […]