关于使用雪花ID后端到前台精度丢失的问题?
来源:6-10 增加删除电子书功能

布辛
2021-03-04
问题流程:
- 点击新增按钮,新增电子书;
- 点击刚刚新增行的删除按钮,无法删除;
分析:
- 调试后台发现数据库中确实生成了,而且也返回到了前端,id=22660681123893248
15.990 DEBUG c.m.w.m.E.selectByExample :137 http-nio-8880-exec-5 ==> Preparing: select id, `name`, category1_id, category2_id, description, cover, doc_count, view_count, vote_count from ebook LIMIT ?, ?
15.990 DEBUG c.m.w.m.E.selectByExample :137 http-nio-8880-exec-5 ==> Parameters: 4(Integer), 4(Integer)
15.990 TRACE c.m.w.m.E.selectByExample :143 http-nio-8880-exec-5 <== Columns: id, name, category1_id, category2_id, description, cover, doc_count, view_count, vote_count
15.991 TRACE c.m.w.m.E.selectByExample :143 http-nio-8880-exec-5 <== Row: 5, Oracle 入门教程, null, null, 零基础入门 Oracle 开发,企业级应用开发最佳首选框架, /image/cover2.png, null, null, null
15.991 TRACE c.m.w.m.E.selectByExample :143 http-nio-8880-exec-5 <== Row: 22660681123893248, 1, 1, 1, 1, null, null, null, null
15.991 DEBUG c.m.w.m.E.selectByExample :137 http-nio-8880-exec-5 <== Total: 2
- 但返回到前端,ID的值就变了, id=22660681123893250
list: Array(2)
0: {id: 5, name: "Oracle 入门教程", category1Id: null, category2Id: null, description: "零基础入门 Oracle 开发,企业级应用开发最佳首选框架", …}
1: {id: 22660681123893250, name: "1", category1Id: 1, category2Id: 1, description: "1", …}
总结:
老师,这个是由于精度的问题么,有的时候就会这样,有的时候就能正常删除,怎么解决呢?
写回答
3回答
-
布辛
提问者
2021-03-04
老师,我暂时解决了,但不知道您是否有更好的解决方法?
第一种,添加JacksonConfig全局配置
@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; } }
第二种,修改EbookQueryResp中的getId返回类型
private Long id; .... public String getId() { return id.toString(); } public void setId(Long id) { this.id = id; }
对比下:
第一种,全局统一配置;
第二种,比较简单,直接修改,但每个类都需要手动修改get方法,后者把ID单独提取到基类中,让所有的Resp都继承基类的get方法。
312021-03-05 -
慕妹9162326
2021-04-03
long convert to String jiu xing le
00 -
39sakuchan
2021-03-17
我也是这个问题
032021-04-05
相似问题