问题展示:我们根据ID查询一条记录,发现发现返回记录的ID与输入值不同
测试代码:
@Controller public class TestController { @ResponseBody @RequestMapping("test") public User test(@RequestParam Long id) { User user = new User(id, "测试"); return user; } public class User { private Long id; private String name; public User(Long id, String name) { super(); this.id = id; this.name = name; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } }
调试后我们发现收到的数据没有变化,只是返回的数据发生变化:
解决方案:我们在对应字段加上JsonFormat注解,将long类型数据以字符串形式返回
@JsonFormat(shape = JsonFormat.Shape.STRING)
原因分析:
主要是由于javascript使用双精度存储(double),当数字长度超过17位是就为产生精度丢失问题。