布尔 getter 在使用 @JsonProperty 注释时序列化两次



假设有一个具有布尔属性的类,其名称以is开头:

class Preferrable {
var isPreferred: Boolean = true
}

它被序列化为{"preferred":true},删除is部分。

如本问题所述,为了防止这种情况,我们需要使用@JsonProperty("isPreferred")注释显式指定属性名称。

这种方法与Java完美配合。但是在 Kotlin 类的情况下,带有注释属性序列化形式包含属性重复:{"preferred":true,"isPreferred":true}.

解决方法是将注释应用于属性 getter。它不适用于数据类,至于我,这段代码看起来有点太多了,只是保持属性名称不变:

class Preferrable {
var isPreferred: Boolean = true
@JsonProperty(value = "isPreferred")
get() = field
}

这种行为背后的原因是什么?这只是一个错误吗?有没有更简单的方法来防止 Kotlinis前缀删除?

布尔值的处理方式与其他数据类型略有不同。您需要在注释中显式使用@get

@get:JsonProperty("isPreferred")
var isPreferred: Boolean = true

请注意,这确实适用于数据类,例如

data class Preferrable(
@get:JsonProperty("isPreferred")
var isPreferred: Boolean = true
)

有关更多信息,请参阅此问题(以及指向更详细讨论位置的链接)。

最新更新