问题
数据库中存的id是雪花算法生成的long类型id,但是查询到前端发现精度丢失了。如下图,
解决方法1(局部解决)
引用jackson-databind依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.4</version>
</dependency>
配置Long2StringSerializer
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
/**
* description: 修改json,long类型转化成string,解决long返回前端丢失精度的问题
*/
public class Long2StringSerializer extends JsonSerializer<Long> {
@Override
public void serialize(Long value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
if (value != null) {
jsonGenerator.writeString(value.toString());
}
}
}
要配置的long类型字段添加注解
@ApiModelProperty(value = "id")
@JsonSerialize(using = Long2StringSerializer.class)
private Long id;
解决方法2
配置ObjectMapper
@Bean
public ObjectMapper objectMapper(){
ObjectMapper objectMapper = new ObjectMapper();
JavaTimeModule javaTimeModule = new JavaTimeModule();
//解决long类型到前端精度丢失的问题
javaTimeModule.addSerializer(Long.class, ToStringSerializer.instance);
javaTimeModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
objectMapper.registerModule(javaTimeModule);
return objectMapper;
}
结果
配置到这里就可以看到数据返回结果精度正常了。