kotlin 1.2.10 jackson-module-kotlin:2.9.0
我在kotlin中有以下数据类:
data class CurrencyInfo(
@JsonProperty("currency_info") var currencyInfo: CurrencyInfoItem?
)
@JsonInclude(JsonInclude.Include.NON_NULL)
data class CurrencyInfoItem(
@JsonProperty("iso_4217") var iso4217: String?,
@JsonProperty("name") var name: String?,
@JsonProperty("name_major") var nameMajor: String?,
@JsonProperty("name_minor") var nameMinor: String?,
@JsonProperty("i_ma_currency") var iMaCurrency: Int?,
@JsonProperty("i_merchant_account") var iMerchantAccount: Int?,
@JsonProperty("i_x_rate_source") var iXRateSource: Int?,
@JsonProperty("base_units") var baseUnits: Double?,
@JsonProperty("min_allowed_payment") var minAllowedPayment: Int?,
@JsonProperty("decimal_digits") var decimalDigits: Int?,
@JsonProperty("is_used") var isUsed: Boolean?
)
当我尝试对此数据类进行反序列化时,我会得到以下结果:{"currency_info":{"iso_4217":"CAD","name":"Canadian Dollar","imerchantAccount":0,"ixrateSource":2}}
正如您所看到的,最后两个选项被错误地反序列化了。通过直接在getter上添加注释@get:JsonProperty,可以解决此问题。但是,根据jackson文档,@JsonProperty应该分配给getter / setter /字段。
因此,我想问是否有一种可靠的方法在Kotlin中为jackson注释属性以进行正确的序列化/反序列化(而且我的所有数据类都是自动生成的,因此很难分别为getter和setter创建某些两/三行注释)
否则,此问题是否可以通过某些jackson设置解决?
根据下面的答案,以下对我起作用
private val mapper = ObjectMapper().registerKotlinModule()
.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY)
.setVisibility(PropertyAccessor.CREATOR, JsonAutoDetect.Visibility.NONE)
.setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE)
.setVisibility(PropertyAccessor.SETTER, JsonAutoDetect.Visibility.NONE)
.setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE)
.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY).setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE)
。问题取决于“is” getter 的特定处理方式。 - Beloo