暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

香草物语博客 2021-06-11
4245

项目上使用数值类型(金额)时,比如价格,我们可能会将数值格式化成两位小数。比如12.34
或者12.00
。如果项目上使用FastJson进行序列化,你会发现如果我们金额是整数,比如12.00
,FastJson序列化之后,返回到前端的是12
而不是12.00
。比如下面这种。其实,查询出来的数据是262.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
字段已经格式化成两位小数。

注意:此功能需要fastjson 1.2.16及之后的版本


文章转载自香草物语博客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论