org.springframework.ui.Model addAttribute 长整型丢失精度

例如有一个用户类

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值呢?

阅读 2.9k
2 个回答
public String edit(Model model, @RequestParam Long id) {}

改为

public String edit(Model model, @RequestParam String id) {}

userService.findById(Long.valueOf(id)));

JavaScript的number类型在处理大于9007199254740992的长整型时会丢失精度,可以以字符串的形式保存避免精度丢失。

{
  "id":1234567890123456789 //js读到的值是1234567890123456800
}
{
  "id":"1234567890123456789" //js读到的值是'1234567890123456789'
}

给你的ID字段或其getter加个注解使其在序列化的时候转为string

@JsonSerialize(using=ToStringSerializer.class)
private Long id;

参考SpringBoot中使用Jackson导致Long型数据精度丢失问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题