Kotlin 使用@JsonProperty注释时,布尔getter被序列化两次
假设有一个具有布尔属性的类,其名称以Kotlin 使用@JsonProperty注释时,布尔getter被序列化两次,kotlin,jackson,Kotlin,Jackson,假设有一个具有布尔属性的类,其名称以is开头: class Preferrable { var isPreferred: Boolean = true } 它被序列化为{“首选”:true},删除是的一部分 如中所述,为了防止出现这种情况,我们需要使用@JsonProperty(“isPreferred”)注释显式指定属性名称 这种方法在Java中非常有效。但对于带有注释属性的Kotlin类,序列化形式包含属性重复:{“preferred”:true,“isPr
is
开头:
class Preferrable {
var isPreferred: Boolean = true
}
它被序列化为{“首选”:true}
,删除是的一部分
如中所述,为了防止出现这种情况,我们需要使用@JsonProperty(“isPreferred”)
注释显式指定属性名称
这种方法在Java中非常有效。但对于带有注释属性的Kotlin类,序列化形式包含属性重复:{“preferred”:true,“isPreferred”:true}
解决方法是将注释应用于属性getter。它对数据类不起作用,对我来说,这段代码看起来有点太多了,无法保持属性名称不变:
class Preferrable {
var isPreferred: Boolean = true
@JsonProperty(value = "isPreferred")
get() = field
}
这种行为背后的原因是什么?只是一只虫子吗?有没有更简单的方法来防止Kotlin的前缀丢失?布尔值的处理方式与其他数据类型稍有不同。您需要在注释中明确使用@get
:
@get:JsonProperty("isPreferred")
var isPreferred: Boolean = true
请注意,这确实适用于数据类,例如
data class Preferrable(
@get:JsonProperty("isPreferred")
var isPreferred: Boolean = true
)
有关更多信息,请参见问题(以及详细讨论此问题的链接)