Long类型传到前端失去精度(2):Long类型不是实体类的某一个字段,Long类型是一个函数的返回值

Long类型传到前端失去精度(2):Long类型不是实体类的某一个字段,Long类型是一个函数的返回值

又是转换Mybatis-Plus的一天,又遇到了之前熟悉的问题:Long类型传到前端失去精度。可是又出现了新的问题,之前是Long类型作为一个实体类的字段,我们使用注解或者重写一个配置类就可以解决。

Springboot-Vue-MybatisPlus 返回给前端的 Long类型数据失去精度怎么办 之 Long类型作为实体类的一个属性


那么作为函数的返回值该怎么办呢?

首先我们要理解之前的写注解和配置类的目的是什么?目的是在实体类进行序列化的时候,在转为json字符串的时候,将Long类型转为String类型再进行保存,那么我们可不可以手动复刻一下,自己转成String类型。


一、我们首先试一下自己转成String类型

@RequestMapping("/getFactoryIDByFactoryManagerUser")
    public String getFactoryIDByFactoryManagerUserReturnString(
            @RequestParam("factoryManagerUserName") String factoryManagerUserName) {

        QueryWrapper<FactoryManager> wrapper = new QueryWrapper<>();

        wrapper
                .eq("fm_name", factoryManagerUserName);


        String factoryID=factoryManagerMapper.selectOne(wrapper).getFm_factoryID().toString();

        return factoryID;
    }

结果是:

1430539259873329200

我猜测可能是这次的字符串被前端自动解析为Long类型了,导致精度再次失真。


二、我们采用alibaba的fastJson产生字符串的方式

@RequestMapping("/getFactoryIDByFactoryManagerUser")
    public String getFactoryIDByFactoryManagerUserReturnString(
            @RequestParam("factoryManagerUserName") String factoryManagerUserName) {

        QueryWrapper<FactoryManager> wrapper = new QueryWrapper<>();

        wrapper
                .eq("fm_name", factoryManagerUserName);


        String factoryID=JSON.toJSONString(factoryManagerMapper.selectOne(wrapper).getFm_factoryID());

        return factoryID;
    }

结果是:

1430539259873329200

这里失真的原因是生成的Json字符串,并不是将Long类型变为String类型,只是生成了一个Json类型的字符串,所以前端解析的时候还是Long类型,所以失真还是必然的。


之前的尝试可以说是葫芦娃救爷爷,一个一个上。手握转String和fastJson这两张大小王,当然要一起出!!!这次我们先转化为String类型,然后再生成字符串。

为什么要生成Json呢?我觉得是这个原因:

json的好处:

  1. 省空间,基本没什么浪费的字符
  2. 标准,主流的都用它,也都支持它
  3. 语言无关,任何语言都能轻松搞定
  4. 类型安全,值是有类型的,比如整数、字符串、布尔等

主要是第四点《类型安全》,Json可以告诉前端,我这个是字符串,你不要自己转化为Long!

@RequestMapping("/getFactoryIDByFactoryManagerUser")
    public String getFactoryIDByFactoryManagerUserReturnString(
            @RequestParam("factoryManagerUserName") String factoryManagerUserName) {

        QueryWrapper<FactoryManager> wrapper = new QueryWrapper<>();

        wrapper
                .eq("fm_name", factoryManagerUserName);


        return JSON.toJSONString(factoryManagerMapper.selectOne(wrapper).getFm_factoryID().toString());
    }

结果是:

1430539259873329153

终于是解决了Long类型失真的这个问题了!!!!点个赞再走(^▽^)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值