目录
现象
前端接收后为: 252938458870317060
分析
JS的基础类型Number,遵循IEEE 754规范,采用双精度存储(double precision),具有53位有效数字精度,并总共占用64 bit。默认模式是最近舍入(Round to Nearest)。
不超过Math.pow(2, 53) = 9007199254740992(16位) 不会丢失精度。
三种方案
解决方法一
yml文件中 添加
#解决long类型 前端接收精度问题
server:
jackson:
generator:
writeNumbersAsStrings: true
切记:可能造成 各种类型 返回到前端都是 Stirng类型。 特别注意一下
解决方法二
添加配置类
@Configuration
public class JacksonConfig {
@Bean
@Primary
@ConditionalOnMissingBean(ObjectMapper.class)
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
// 全局配置序列化返回 JSON 处理
SimpleModule simpleModule = new SimpleModule();
//JSON Long ==> String
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
return objectMapper;
}
}
解决方法三
将要传的id 上加上注解
//活动id
@JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class)
private String activeId;