代码之家  ›  专栏  ›  技术社区  ›  Jeggy

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

  •  2
  • Jeggy  · 技术社区  · 7 年前

    例子:

    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 . 这只有在我为实际类编写反序列化程序时才有效( Foo Bar Specific

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   Yoni Gibbs    7 年前

    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