Spring Boot解决fastjson序列化丢失小数点后零的问题

Spring Boot解决fastjson序列化丢失小数点后零的问题

Laughing
2021-06-11 / 0 评论 / 1,879 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年03月17日,已超过306天没有更新,若内容或图片失效,请留言反馈。

项目上使用数值类型(金额)时,比如价格,我们可能会将数值格式化成两位小数。比如12.34或者12.00
如果项目上使用FastJson进行序列化,你会发现如果我们金额是整数,比如12.00,FastJson序列化之后,返回到前端的是12而不是12.00
查阅FastJson文档,我们发现,在fastjson 1.2.16版本之后,JSONField支持新的定制化配置serializeUsing,可以单独对某一个类的某个属性定制序列化。

实现ObjectSerializer接口

第一步,我们实现ObjectSerializer,提供我们自己序列化的规则,如下

/**
 * Description:FastJson金额序列化格式化成两位
 *
 * @author : laughing
 * DateTime: 2021-06-11 11:49
 */
public class Keep2Format implements ObjectSerializer {

    private DecimalFormat df = new DecimalFormat("0.00");

    @Override
    public void write(JSONSerializer jsonSerializer, Object object, Object fieldName, Type type, int i) throws IOException {
        jsonSerializer.write(df.format(object));
    }
}

@JSONField注解字段

第二步,通过@JSONField设置我们自定义的序列化规则。

@JSONField(serializeUsing = Keep2Format.class)

再次查看数据,可以发现price字段已经格式化成两位小数。

[alt type="info"]注意:此功能需要fastjson 1.2.16及之后的版本[/alt]

0

评论 (0)

取消