原因:
js 的 number 类型支持的最大值是9007199254740992(16位),java 的 long 类型最大值9223372036854775807(19位),远高于 js number类型的最大值,所以long类型的ID传给前端就会导致精度丢失。
解决方法一:
id-type: ID_WORKER_STR
简单来说就是 id 转 为string类型,db和生成的id数据类型都改为 string 类型
缺点:牺牲了 long 类型的性能优势
解决方法二:
在实体类上加上注解
@JsonFormat(shape = JsonFormat.Shape.STRING)
private Long id;
解决方法三:
1.提供对象转换器JacksonObjectMapper,基于Jackson进行Java对象到json数据的转换。
2.在WebMvcConfig配置类中扩展Spring mvc的消息转换器,在此消息转换器中使用提供的对象转换器进行Java对象到json数据的转换
/**
* 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象
* 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象]
* 从Java对象生成JSON的过程称为 [序列化Java对象到JSON]
*/
public class JacksonObjectMapper extends ObjectMapper {
public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String