JSON序列化时将BigDecimal类型转换成String类型
后端向前端返回的BigDecimal类型的数据在某些情况下会出现精度丢失的问题,为了避免此种情况我们一般会将BigDecimal转换成String来规避。
一、 简单模式
@JsonFormat(shape = JsonFormat.Shape.STRING)
private BigDecimal rate
二、 复杂模式
// 先自定义序列化方式
public final class BigDecimalSerialize extends JsonSerializer<Object> {
private BigDecimalSerialize(){}
@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
BigDecimal bigDecimal = translateToBigDecimal(value);
if (Objects.nonNull(value) && Objects.nonNull(bigDecimal)) {
// 设置保留的小数位和舍入方式
gen.writeString(bigDecimal.setScale(6, BigDecimal.ROUND_HALF_UP).toPlainString());
} else {
gen.writeString(StringUtils.EMPTY);
}
}
/**
* @Author XiaoDiaoChong
* @Description 将值转换为BigDecimal
* @Date 2021/9/1
* @Param [object]
* @return java.math.BigDecimal
**/
public static BigDecimal translateToBigDecimal(Object object) {
BigDecimal bigDecimal = null;
if (object instanceof BigDecimal) {
bigDecimal = (BigDecimal) object;
}
return bigDecimal;
}
}
// 在需要转换的字段上使用自定义序列化进行转换
@JsonSerialize(using = BigDecimalSerialize.class)
private BigDecimal rate
本作品采用《CC 协议》,转载必须注明作者和本文链接