Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 使用@JsonProperty注释时,布尔getter被序列化两次_Kotlin_Jackson - Fatal编程技术网

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
)
有关更多信息,请参见问题(以及详细讨论此问题的链接)