fastJson默认会将浮点数类型的后两位.00去掉。现在项目中的需求是:需要保留两位小数,形如10.00这种格式,因此需要对JsonSerializer.serialize方法进行重写,自定义返回的浮点数类型。
1、首先定义一个JsonSerializerUtils 类继承JsonSerializer抽象类,重写serialize方法
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;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.Objects;
/**
* @author huangtc
* @description:
* @date 2019/12/6 10:47
*/
public class JsonSerializerUtils extends JsonSerializer<BigDecimal> {
@Override
public void serialize(BigDecimal value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
if (Objects.nonNull(value)) {
//保留2位小数#代表末位是0舍去
DecimalFormat decimalFormat = new DecimalFormat("0.00");
//四舍五入
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
String result = decimalFormat.format(value);
//注意这里不能使用jsonGenerator.writeNumber(result);方法,不然又会把.00去掉
jsonGenerator.writeString(result);
} else {
jsonGenerator.writeString("0.00");
}
}
}
2、在返回的VO对象上使用注解,指定返回的样式
@JsonSerialize(using = JsonSerializerUtils.class)
private BigDecimal subsidyAmount;