后端将Long类型数据传输到前端出现精度丢失的问题(品优购订单号orderId精度丢失问题)

1.数据库中的order_id为Long类型的

后端将Long类型数据传输到前端出现精度丢失的问题(品优购订单号orderId精度丢失问题)_第1张图片

(1). TbOrder实体类

@ApiModel(value = "订单表")
@Table(name = "tb_order")
public class TbOrder implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long orderId;
    ....
}

(2). OrderController控制类

@RequestMapping("/order")
@RestController
public class OrderController {
    @Reference
    private OrderService orderService;

    @RequestMapping("/findAll")
    public List findAll() {
        return orderService.findAll();
    }
}

 

2.前端部分
 

orderController.js

    $scope.findOrderList = function () {
        orderService.findOrderList().success(function (response) {
            $scope.orderList = response;
        })
    }

orderService.js

    this.findOrderList = function () {
        return $http.get("../order/findAll.do");
    }

 

后端将Long类型数据传输到前端出现精度丢失的问题(品优购订单号orderId精度丢失问题)_第2张图片

 

从上面看出来了,后台返回的数据,除了orderId不一致,其他数据都一致,最后在网上百度了一下,因为orderId是Long型的,所以JS在处理返回数据类型是Long的时候,精度会丢失一部分!!!


造成原因:JS内置有32位整数,而number类型的安全整数是53位。如果超过53位,则精度会丢失。正如现在后台传来一个64位的Long型整数,因此超过了53位,所以后台返回的值和前台获取的值会不一样。

解决方法:


 

ToStringConverter.java
package com.pingyougou.manage.converter;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;

public class ToStringConverter extends ObjectMapper {

    public ToStringConverter() {
        super();
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
        registerModule(simpleModule);
    }
}

springmvc.xml

    
        
            
                
                
                    
                        application/json;charset=UTF-8
                        text/plain;charset=UTF-8
                    
                
            
            
            
                
                    
                        
                            
                                
                            
                        
                    
                
            
        
    

 

后端将Long类型数据传输到前端出现精度丢失的问题(品优购订单号orderId精度丢失问题)_第3张图片

后端将Long类型数据传输到前端出现精度丢失的问题(品优购订单号orderId精度丢失问题)_第4张图片

你可能感兴趣的:(java,springMVC)