java - 如何在 jackson 中编写自定义属性反序列化器

标签 java json kotlin jackson deserialization

我有很多不同的类,它们的属性需要自定义反序列化。

例:

data class Specific(val a: String, val b: String) // <-- Needs special deserialization
data class Foo(val value: String, val sp: Specific)
data class Bar(val something: Int, val sp: Specific)

我尝试使用StdDeserializer创建自定义反序列化器。而且这仅在我为实际类(FooBar)编写反序列化程序时才有效,但是我只想为Specific类型编写一个反序列化程序。

当我使用Kotlin时,我会喜欢使用非Java注释的方式。

最佳答案

使用要用于反序列化的ObjectMapper,首先为Specific类注册一个自定义反序列化器。然后,在反序列化此类的实例时,无论您是直接对其进行反序列化,还是作为其他要反序列化的对象的属性,都将使用该方法。

例如,您可以执行以下操作:

class SpecificDeserializer() : StdDeserializer<Specific>(Specific::class.java) {
    override fun deserialize(p: JsonParser, ctxt: DeserializationContext): Specific {
        // Deserialize
    }
}

val mapper = jacksonObjectMapper()
mapper.registerModule(SimpleModule().also {
    it.addDeserializer(Specific::class.java, SpecificDeserializer())
})

val foo = mapper.readValue<Foo>(...

这是here解释的。注意,对于序列化,可以采用相同的方法。

关于java - 如何在 jackson 中编写自定义属性反序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53947691/

相关文章:

java - 如何显示与JPS页面不同的URL链接?

java - 为什么要在释放操作中获取锁

json - 使用 Express 和 Postman 同时发布多个 JSON 对象

java - Kotlin 的智能转换未能通过简单的不可空性推导

android - GSON getAsString() 方法不会从 JSON 元素中去除双引号?

java - 防止自定义 JPanel 扩展

java - 创建没有嵌套循环的特定模式

ios - 存储具有复杂数据结构的 JSON 文件以供以后使用的最佳方式是什么?

javascript - header 中的 json 语法错误

ios - 是否有与 Mockito 类似的框架用于在 Kotlin MPP 中测试共享代码或 iOS 代码?