例如有一个用户类
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值呢?
parseInt(94105929343041536) = 94105929343041540
不是前端传过来有问题,是后台传给前端的"user/edit"页面,页面获取的id有问题。
@五毛程序员: 那就后端把Long转string,传给前台,否则前台JavaScript接收到数据就会对数据做存储,这时候数据就变了
@大志若愚: 这是解决办法。但如何修改,改动最小?需要考虑不只是id是Long的情形。
@五毛程序员:
SpringBoot是使用 Jackson 作为 JSON 序列化和反序列化工具的,
配置 Jackson 将Long都转为字符串
可以参考Spring Boot 2.0版本 Jackson全局转化long类型为String,解决jackson序列化时long类型缺失精度问题
让前端用字符串的方式传递,后端用String接收参数,然后再转Long