• SpringMVC使用Jackson返回JSON数据时Long类型数据精度丢失


    问题展示:我们根据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;
            }
        }
    }
    View Code

    调试后我们发现收到的数据没有变化,只是返回的数据发生变化:

    解决方案:我们在对应字段加上JsonFormat注解,将long类型数据以字符串形式返回

    @JsonFormat(shape = JsonFormat.Shape.STRING)

    原因分析:

      主要是由于javascript使用双精度存储(double),当数字长度超过17位是就为产生精度丢失问题。

  • 相关阅读:
    《Spring2之站立会议1》
    《Spring1之第十次站立会议》
    《Spring1之第九次站立会议》
    《Spring1之第八次站立会议》
    《Spring1之第七次站立会议》
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
  • 原文地址:https://www.cnblogs.com/zhi-leaf/p/13323173.html
Copyright © 2020-2023  润新知