数据库主键设计为Long,新增查询发现id和数据库不一样,记录了解的信息。
问题出现原因
各语言对long的定义不一样,java的long是2的64次方。而js的number最大为2的54次方-1。所以用json传递的时候就可能会出现数据丢失的问题。
解决方案
我采用的解决方法是将数据转json时,将long型转成string,字符串不存在精度的问题。
全局替换
在MvcConfig配置json配置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MvcConfig extends WebMvcConfigurerAdapter {
private ObjectMapper objectMapper;
public void extendMessageConverters(List<HttpMessageCoverter<?> converters) {
MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
simpleModule.addSerializer(long.class, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
jsonConverter.setObjectMapper(objectMapper);
converters.add(jsonConverter);
}
}
单字段设置
实体类字段上加如下注解1
(using=ToStringSerializer.class)