前端接收long类型数据精度丢失问题及解决
- 产生原因:
由于Long类型最大19位而JavaScript最大接收数字为16位,固存在精度丢失问题。 - 解决办法
1、后端修改类型Long -> string 2、不改变数据类型,FashJson序列机制下的项目增加:@JSONField(serializeUsing = ToStringSerializer.class) 3、不改变数据类型,Jackson序列机制下的项目:@JsonFormat(shape = JsonFormat.Shape.STRING) 例: @JSONField(serializeUsing = ToStringSerializer.class) private Long id; @JsonFormat(shape = JsonFormat.Shape.STRING) private Long id;
- @JsonSerialize注解失效原因:
1、被转换的字段必须是包装类类型,否则会转换失败 @JsonSerialize(using = ToStringSerializer.class) private Long parentId; //转化成功 @JsonSerialize(using = ToStringSerializer.class) private long parentId; //转化失败 2、@JsonSerialize注解是在SpringBoot默认提供的JSON解析包Jackson中的。 但是因为新引入的oss包中包含了谷歌提供的解析JSON数据的GSON工具包, 造成了注解@JsonSerialize失效。 3、object类型二次转换等。