假设存在一个具有布尔属性的类,其名称以is
开头:
class Preferrable {
var isPreferred: Boolean = true
}
它被序列化为{"preferred":true}
,删除了is
部分。
如this question中所述,为防止这种情况,我们需要使用@JsonProperty("isPreferred")
注释明确指定属性名称。
该方法与Java完美配合。但是,如果Kotlin类具有带注释的属性,则序列化形式包含属性重复项:{"preferred":true,"isPreferred":true}
。
解决方法是将注释应用于属性获取器。它不适用于数据类,对我而言,此代码对于仅保留属性名称来说显得有些过多:
class Preferrable {
var isPreferred: Boolean = true
@JsonProperty(value = "isPreferred")
get() = field
}
这种行为背后的原因是什么?这只是一个错误吗?有没有更简单的方法来防止Kotlin的is
前缀丢失?
答案 0 :(得分:3)
布尔值的处理与其他数据类型略有不同。您需要在注释中明确使用@get
:
@get:JsonProperty("isPreferred")
var isPreferred: Boolean = true
请注意,这确实适用于数据类,例如
data class Preferrable(
@get:JsonProperty("isPreferred")
var isPreferred: Boolean = true
)
有关更多信息,请参见this问题(以及指向该链接的详细讨论)。