/* * Copyright (c) 2018-2028, DreamLu All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: DreamLu 卢春梦 (596392912@qq.com) */ package org.springblade.core.tool.jackson; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import java.math.BigDecimal; import java.math.BigInteger; /** * 大整数序列化为 String 字符串,避免浏览器丢失精度 * *

* 前端建议采用: * bignumber 库: https://github.com/MikeMcl/bignumber.js * decimal.js 库: https://github.com/MikeMcl/decimal.js *

* * @author L.cm */ public class BladeNumberModule extends SimpleModule { public static final BladeNumberModule INSTANCE = new BladeNumberModule(); public BladeNumberModule() { super(BladeNumberModule.class.getName()); // Long 和 BigInteger 采用定制的逻辑序列化,避免超过js的精度 this.addSerializer(Long.class, BigNumberSerializer.instance); this.addSerializer(Long.TYPE, BigNumberSerializer.instance); this.addSerializer(BigInteger.class, BigNumberSerializer.instance); // BigDecimal 采用 toString 避免精度丢失,前端采用 decimal.js 来计算。 this.addSerializer(BigDecimal.class, ToStringSerializer.instance); } }