前后端分离,Jackson,Long精度丢失
案例:后端接口放回一个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;
}
原文地址:https://blog.csdn.net/qq_41163858/article/details/143507867
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!