问题:雪花算法的id长度为19位,前端能够接收的数字最多只能是16位的,因此就会造成精度丢失,得到的ID不是真正的ID。
解决:
在拦截器中加入Long类型转换,返回给前端string
- package io.global.iot.common.config;
-
- import com.fasterxml.jackson.annotation.JsonAutoDetect;
- import com.fasterxml.jackson.annotation.PropertyAccessor;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.fasterxml.jackson.databind.SerializationFeature;
- import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
- import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
- import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.http.converter.HttpMessageConverter;
- import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
- import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
- import java.time.LocalDateTime;
- import java.time.format.DateTimeFormatter;
- import java.util.List;
-
- @Configuration
- public class MvcConfiguration implements WebMvcConfigurer {
-
- @Override
- public void extendMessageConverters(List
> converters) { - MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
- ObjectMapper objectMapper = new ObjectMapper();
- objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
- objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
- JavaTimeModule javaTimeModule = new JavaTimeModule();
- javaTimeModule.addSerializer(LocalDateTime.class,
- new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
- javaTimeModule.addSerializer(Long.class, ToStringSerializer.instance);
- javaTimeModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
- objectMapper.registerModule(javaTimeModule);
- messageConverter.setObjectMapper(objectMapper);
- converters.add(0, messageConverter);
- }
-
- }