model.addAttribute 长整型数据精度丢失

五毛程序员 发布于 2019/04/30 15:44
阅读 305
收藏 0

【DevOps必读】产品经理与程序员之间如何破局?>>>

例如有一个用户类
```
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值呢?

加载中
0
爱De资格

输出给前端用字符串,后端Controller把字符串解析为long,只会涉及到对Controller修改

五毛程序员
五毛程序员
回复 @爱De资格 : 是个思路,值得一试。
爱De资格
回复 @五毛程序员 : 如果是对象转json的化可以定制一下id字段的输出和解析方式
五毛程序员
五毛程序员
现在的问题是Long要转成String,但如何改动改变最小,前提是不能改表的字段类型。
五毛程序员
五毛程序员
有道理。问题是我不可能再建个类,把id设为String,把属性copy过去。到时候类爆炸了。而且需要考虑的是,不只是id这一列是长整型,也有其他长整型的属性。
0
thirc
thirc

id一般都是不可变以及不涉及到运算的字段,建议使用string类型

五毛程序员
五毛程序员
项目里大量的表都是int或者long类型的id,改表不实际。
0
你不懂的吧
你不懂的吧

单独把id暴露出去啊   model.addAttribute("id", userService.findById(id).getId().toString());

五毛程序员
五毛程序员
而且如果是有其他Long类型的属性,还得每个都单独拎出来返回。
五毛程序员
五毛程序员
是个办法。但改动太大。
0
ville
ville

何必那么麻烦,使用Jackson注解直接搞定了

ville
ville
回复 @五毛程序员 : 那你让它走json嘛
五毛程序员
五毛程序员
兄弟,这样是没用的,因为没走json返回,所以你的注解没有用到。
返回顶部
顶部