请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于使用雪花ID后端到前台精度丢失的问题?

问题流程:

  1. 点击新增按钮,新增电子书;
  2. 点击刚刚新增行的删除按钮,无法删除;

分析:

  1. 调试后台发现数据库中确实生成了,而且也返回到了前端,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
  1. 但返回到前端,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

3回答

提问者 布辛 2021-03-04 21:14:20

老师,我暂时解决了,但不知道您是否有更好的解决方法?

第一种,添加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方法。

3 回复 有任何疑惑可以回复我~
  • 甲蛙 #1
    这个得给你点赞,推荐第一种做法,准备后续在我公众号单独出个视频讲解下
    回复 有任何疑惑可以回复我~ 2021-03-05 10:39:06
慕妹9162326 2021-04-03 23:03:58

long convert to String jiu xing le

0 回复 有任何疑惑可以回复我~
39sakuchan 2021-03-17 11:17:51

我也是这个问题

0 回复 有任何疑惑可以回复我~
  • 甲蛙 #1
    看下这个视频:https://mp.weixin.qq.com/s/0-DAN-lXq3gNSVALAeLNHw
    回复 有任何疑惑可以回复我~ 2021-03-18 09:52:03
  • bbbbbbbbbbbb 回复 甲蛙 #2
    按照老师方法做了,但是前端分页出现
    [VueTypes warn]: oneOfType - provided value does not match any of the 2 passed-in validators:
      shape - "total" property validation error:
         number - value "9" should be of type "Number"
      looseBool - value "[object Object]" should be of type "Boolean"
    返回来的页码也是 string 类型?
    回复 有任何疑惑可以回复我~ 2021-04-04 23:13:28
  • 甲蛙 回复 bbbbbbbbbbbb #3
    这是因为分页属性里的total也是个long类型,也会被转成string,可以在前端用Number(total)把它转成number类型
    回复 有任何疑惑可以回复我~ 2021-04-05 14:17:21
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信