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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!