使用@JsonProperty注释时,布尔型getter会被序列化两次

时间:2019-08-26 08:56:08

标签: kotlin jackson

假设存在一个具有布尔属性的类,其名称以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前缀丢失?

1 个答案:

答案 0 :(得分:3)

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

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

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

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

有关更多信息,请参见this问题(以及指向该链接的详细讨论)。