案例:后端接口放回一个Long数据
    @GetMapping("/testForLong")
    public Map<String, Object> testForLong() {
        Map<String, Object> map = new HashMap<>();
        map.put("aaa", 1234567890123456789L);
        return map;
    }
实际前端接收的数据
 

 前后端数据不一致。这是因为JavaScript中的数字一律采用IEEE-754标准的64位浮点数表示,这种格式可以很好地处理大多数数字运算,但对于非常大的整数(超出2^53 - 1),就可能出现精度损失,这就非常的恶心了,可能会让你感到莫名其妙。当从后端获取到Long类型的值并尝试在前端展示时,如果该值超过了JavaScript安全整数范围,那么显示的结果可能不准确。
如何解决:
 全局解决方案:项目中所有的Long都会被转换为String进行输出。
@Component
public class PackMapperCustomizer implements Jackson2ObjectMapperBuilderCustomizer {
    @Override
    public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
        jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance);
    }
}
某个字段单独处理:
@Data
public class TestVo {
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;
    
    private String name;
    private Long code;
}


















