spring-mvc接口返回json格式数据Long类型字段精度失真

问题

接口响应vo:

@Data
public class QueryProductListVo implements Serializable {

      private Long id;
      private String name;
      ...
}

在chrome浏览器开发者工具里查看Response:

{
    "id":654123883065486500,
    "name":"测试商品"
}

其中Long类型的id字段值为654123883065486500,精度发生了丢失,实际值为654123883065486521

原因:

JavaScript对数字的处理精度有限,整数部分最多为15位,超过的部分会丢失,并且四舍五入。

可以在chrome的console里测试:
输入:
654123883065486521 返回 654123883065486500

输入:
654123883065486561 返回 654123883065486600

注:如果用postman调接口返回正常。

解决方式:

  1. 使用jackson的@JsonSerialize注解,指定序列化为字符串类型
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
  1. 在接口返回前,通过工具类方法对需要转换为字符串类型的字段特殊转换处理

  2. 修改字段类型,Long改为String


参考:

posted @ 2020-12-12 14:11  cdfive  阅读(792)  评论(0)    收藏  举报