vr网站建设,企业宣传文案,网站备案和域名备案区别,撩人的网站怎么做问题描述#xff1a;
前端根据id发起请求查找对象的时候一直返回找不到对象#xff0c;然后查看了请求报文#xff0c;发现前端传给后台的数据id不对#xff0c;原本的id是1435421253099634623#xff0c;可前端传过来的id是 1435421253099634700#xff0c;后三位变成了…问题描述
前端根据id发起请求查找对象的时候一直返回找不到对象然后查看了请求报文发现前端传给后台的数据id不对原本的id是1435421253099634623可前端传过来的id是 1435421253099634700后三位变成了700。 出现这种情况的原因是前端的js语言最大支持16位的数字而后台用的是19位的雪花id所以导致前端处理时精度溢出了。
解决方案
后端将超过前端支持范围的int类型转换成字符串即将long 转成 string 有两种解决方式
1、使用 JsonSerialize(using ToStringSerializer.class) 按需配置 这种方式非常简单直接在返回前端的VO对象中的Long属性上写个注解就可以。然后返回前端的json报文中的Long值就变成了String字符串。 // import com.fasterxml.jackson.databind.annotation.JsonSerialize;// import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;JsonSerialize(using ToStringSerializer.class)private Long id;
2、全局配置注意扫描路径简单粗暴、不需要每个地方都去配置影响全局
Configuration
public class SerializerConfig {/*** 解决主键Long类型返回给页面时页面精度丢失的问题,时间格式化返回*/Beanpublic ObjectMapper objectMapper() {ObjectMapper objectMapper new ObjectMapper();SimpleModule simpleModule new SimpleModule();simpleModule.addSerializer(Long.class, ToStringSerializer.instance).addSerializer(Long.TYPE, ToStringSerializer.instance);simpleModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss)));simpleModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(yyyy-MM-dd)));simpleModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(HH:mm:ss)));simpleModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss)));simpleModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(yyyy-MM-dd)));simpleModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(HH:mm:ss)));objectMapper.registerModule(simpleModule);return objectMapper;}
}