1.問題:
前端發現,修改和刪除的時候,修改了,刪除了之后,結果查看詳情和列表的時候,數據仍然還是以前的數據。
2.分析
查看接口文檔調用接口,發現返回的id和數據庫的id一致,通過前端ajax調用,用F12的network查看的響應結果,發現id和數據庫的id不一樣,最后幾位變成了0。
這就是典型的Long類型精度丟失的問題。
3.解決方案
方法一:全局解決方案,統一給前端返回字符串
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.math.BigInteger; @Configuration public class JacksonConfig { /** * Jackson全局轉化long類型為String,解決jackson序列化時傳入前端Long類型缺失精度問題 */ @Bean public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { return jacksonObjectMapperBuilder -> { jacksonObjectMapperBuilder.serializerByType(BigInteger.class, ToStringSerializer.instance); jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance); }; } }
方法二:字段上加注解
@JsonSerialize(using = ToStringSerializer.class) private Long id;