JSON序列化時將BigDecimal型別轉換成String型別

XiaoDiaoChong發表於2021-09-01

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

相關文章