问题
如果小数点后面为00,如 12.00,那么序列化返回之后就会按照int的方式返回,那么前端就会展示为 12
解决
将所有BigDecimal类型的字段全部按照string的方式序列化,然后使用@JsonSerialize(using = BigDecimalSerializer.class)
标注在字段上达到自定义的序列化方式目的
public class BigDecimalSerializer extends JsonSerializer<BigDecimal> {
@Override
public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeString(value.toString());
}
}
//在指定字段上标注
@JsonSerialize(using = BigDecimalSerializer.class)
private BigDecimal payMoneyTotal;
/**
* 反序列化BigDecimal
*/
public class BigDecimalDeserializer extends JsonDeserializer<BigDecimal> {
@Override
public BigDecimal deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
String value = p.getText();
return new BigDecimal(value);
}
}
//在指定字段上标注
@JsonDeserialize(using = BigDecimalDeserializer.class)
private BigDecimal amount;
这段代码中,您定义了一个名为 BigDecimalSerializer
的类,继承自 JsonSerializer<BigDecimal>
。类中的 serialize
方法实现了对 BigDecimal 对象的序列化。
接下来,您在一个类的属性上使用了 @JsonSerialize
注解,并指定了序列化器类。这样,当您使用这个类时,@JsonSerialize
注解指定的序列化器类将会被应用,并自动序列化 BigDecimal 对象。
在这个例子中,您将 payMoneyTotal
字段标注为使用 BigDecimalSerializer
序列化器类,因此当您序列化或反序列化 payMoneyTotal
字段时,将使用 BigDecimalSerializer
中的 serialize
方法来序列化 BigDecimal 对象。
总结:
本文介绍了解决BigDecimal类型数据序列化时的问题,即当小数点后面为00时,序列化返回的数据会按照int的方式返回。解决方法是使用自定义的序列化方式,将所有BigDecimal类型的字段按照string的方式序列化,并使用@JsonSerialize注解指定序列化器类。这样,序列化器类中的serialize方法将会在序列化BigDecimal对象时被自动调用,避免数据类型改变的问题。
更多精彩内容请关注☄公众号: Coder无霸哥
不要让我们追赶知识, 要让知识追赶我们~