問題展示:我們根據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位是就為產生精度丟失問題。