使用jackson支持kotlin中继承链接对象的反序列化
假设我们需要遵守此类对象继承结构的反序列化:使用jackson支持kotlin中继承链接对象的反序列化,kotlin,jackson,Kotlin,Jackson,假设我们需要遵守此类对象继承结构的反序列化: open class Parent( @JsonProperty("parent_value") val parentValue: String = "default" ) class Child( @JsonProperty("child_value") val childValue: String) : Parent() 父对象和子对象都定义自己的字段,并在其上定义@JsonProperty 我还有一个测试来检
open class Parent(
@JsonProperty("parent_value")
val parentValue: String = "default"
)
class Child(
@JsonProperty("child_value")
val childValue: String) : Parent()
父对象和子对象都定义自己的字段,并在其上定义@JsonProperty
我还有一个测试来检查反序列化:
@Test
fun testDeserializeWithInheritance() {
val map = mapOf("child_value" to "success", "parent_value" to "success")
val jsonResult = objectMapper.writerWithDefaultPrettyPrinter()
.writeValueAsString(map)
println("serialized object: $jsonResult")
val deserialized: JsonConverterModuleTest.Child = objectMapper.readValue(jsonResult)
println("deserialized object: withdraw=${deserialized.childValue} parentValue = ${deserialized.parentValue}, exchangeFrom = ${deserialized.parentValue}")
assertEquals("success", deserialized.childValue)
assertEquals("success", deserialized.parentValue)
}
但问题是测试失败并出现错误:
序列化对象:{“子值”:“成功”,“父值”:
“成功”}
org.junit.ComparisonFailure:父值不相等:预期:成功
实际值:默认值 如何正确地反序列化子对象?主要目标是不复制子类中的字段或
@JsonProperty
注释
我对这个问题有一个解决方案,但我愿意接受更好的解决方案。这个问题的发生是因为构造函数字段上的注释不会自动应用于字段或getter(kotlin mechanizm)。也似乎在反序列化子对象时未对其进行处理。
Jackson支持通过field或getter方法进行注释,因此可以选择适当的解决方案
open class Parent(
@get:JsonProperty("parent_value")
val parentValue: String = "default"
)
或
至此,测试完成Hi!注释字段帮了我的忙。但你能解释一下“get”和“field”之间的区别吗?这样我们就可以知道什么时候需要使用其中一个而不是另一个了?谢谢
open class Parent(
@field:JsonProperty("parent_value")
val parentValue: String = "default"
)