项目上使用数值类型(金额)时,比如价格,我们可能会将数值格式化成两位小数。比如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)