当某个类包含一个内联值类的属性时,Jackson 会忽略附加到封闭类的任何字段的所有注释。最小可重现示例:
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
data class MyDataClass(val value: String)
@JvmInline
value class MyInlineClass(val value: String)
data class ClassUsingMyDataClass(
@JsonProperty("fred")
val myInlineClassField: MyDataClass,
@JsonProperty("barney")
val myStringField: String
)
data class ClassUsingMyInlineClass(
@JsonProperty("fred")
val myInlineClassField: MyInlineClass,
@JsonProperty("barney")
val myStringField: String
)
fun main() {
val objectMapper = jacksonObjectMapper()
// Prints {"fred":{"value":"one"},"barney":"two"} as expected
println(objectMapper.writeValueAsString(ClassUsingMyDataClass(MyDataClass("one"), "two")))
// Prints {"myInlineClassField":"one","myStringField":"two"}, why doesn't it use fred and barney?
println(objectMapper.writeValueAsString(ClassUsingMyInlineClass(MyInlineClass("one"), "two")))
}
@JsonProperty
一旦包含了一个类型为内联值类的字段,有没有办法可以再次工作?
我正在使用 Jackson 2.18.2 和 Kotlin 2.1.10。