问题描述
我正在使用 Jackson
反序列化 JSON
。我们还使用 BigDecimal
类型将传入的 String
反序列化为,并且该值可以包含逗号,例如一万可以作为“10,000”提交。为了能够将此值反序列化为 BigDeciaml
,我创建了一个简单的自定义类:
class BigDecimalCommaDeserializer : JsonDeserializer<BigDecimal>() {
override fun deserialize(parser: JsonParser,context: DeserializationContext): BigDecimal? {
return if (parser.text != null && parser.text.isNotEmpty())
BigDecimal(parser.text.replace(",",""))
else null
}
}
并按如下方式接线:
@JsonDeserialize(using = BigDecimalCommaDeserializer::class)
@JsonFormat(shape = JsonFormat.Shape.STRING)
var unitCount: BigDecimal? = null,
我注意到,还有一个 com.fasterxml.jackson.databind.deser.std.BigDecimalDeserializer
。这仍会被调用,还是我应该考虑从我的 BigDecimalCommaDeserializer
委托给它调用?
解决方法
在这种情况下将使用自定义反序列化程序 BigDecimalCommaDeserializer
。常见的 BigDecimalDeserializer
将在所有其他未指定自定义反序列化器的地方默认使用。