JAVA注解修改

JAVA注解修改

BigDecimal 序列化丢失精度的问题

实体类定义

private BigDecimal spreadRate;

spreadRate=12.00
Json 返回给前端
会显示: spreadRate=12
后面两个00的精度丢失

解决办法

创建一个类继承 JsonSerialize


import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.math.BigDecimal;

/**
 * 格式化金额类型
 */
public class BigDecimalSerializer extends JsonSerializer<BigDecimal> {
    public BigDecimalSerializer() {
    }

    @Override
    public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        if (value != null) {
            BigDecimal number = value.setScale(2, BigDecimal.ROUND_HALF_UP);
            gen.writeString(number.toString());
        } else {
            gen.writeNumber(value);
        }

    }
}

使用方式
金额类型上添加注解

@JsonSerialize(using = BigDecimalSerializer.class)
private BigDecimal spreadRate;

版权声明:本文为fendouweiqian原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。