首页 新闻 赞助 找找看

model.addAttribute 长整型丢失精度问题

0
悬赏园豆:100 [待解决问题]

例如有一个用户类

public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    
    private Long id;
    
    private String username;
    
    //...省略get、set
}

我在跳转到编辑页面时,需要携带要编辑的用户信息。大概的代码如下:

@GetMapping("edit")
public String edit(Model model, @RequestParam Long id) {
    model.addAttribute("entity", userService.findById(id));
    return "user/edit";
}

那么此时问题就出来了。在页面“user/edit”上获取到的id,精度丢失了,例如本来是94105929343041536变成了94105929343041540。
要怎么改,改动最小,才能获取到正确的长整型的id值呢?

五毛程序员的主页 五毛程序员 | 初学一级 | 园豆:102
提问于:2019-04-30 15:42
< >
分享
所有回答(2)
0
  1. 传的数据量不小,建议使下Post传参
  2. 这个是JavaScript的Number导致的失真, 前端页面可以使用string传值
parseInt(94105929343041536) = 94105929343041540
大志若愚 | 园豆:2138 (老鸟四级) | 2019-04-30 16:53

不是前端传过来有问题,是后台传给前端的"user/edit"页面,页面获取的id有问题。

支持(0) 反对(0) 五毛程序员 | 园豆:102 (初学一级) | 2019-04-30 16:56

@五毛程序员: 那就后端把Long转string,传给前台,否则前台JavaScript接收到数据就会对数据做存储,这时候数据就变了

支持(0) 反对(0) 大志若愚 | 园豆:2138 (老鸟四级) | 2019-04-30 16:57

@大志若愚: 这是解决办法。但如何修改,改动最小?需要考虑不只是id是Long的情形。

支持(0) 反对(0) 五毛程序员 | 园豆:102 (初学一级) | 2019-04-30 17:22

@五毛程序员:
SpringBoot是使用 Jackson 作为 JSON 序列化和反序列化工具的,
配置 Jackson 将Long都转为字符串

可以参考Spring Boot 2.0版本 Jackson全局转化long类型为String,解决jackson序列化时long类型缺失精度问题

支持(0) 反对(0) 大志若愚 | 园豆:2138 (老鸟四级) | 2019-04-30 17:34
0

让前端用字符串的方式传递,后端用String接收参数,然后再转Long

狼爷 | 园豆:1204 (小虾三级) | 2019-05-02 12:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册