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;