後端向前端返回的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 協議》,轉載必須註明作者和本文連結