問題:本案例,實體類id採用的是雪花id生成策略,數據庫類型是bigint類型的,實體類裏是Long類型的。查詢出來沒問題,但是序列化後反給前端,精度丟失了。
解決方案一:
在對應的id上加註解:
@JsonSerialize(using = ToStringSerializer.class) private Long id;
解決方案二:
寫配置文件:以下代碼就是,但是會把所有的long類型轉換成String類型。建議採用第一種,比較好
@Configuration
public class JsonLongToStringConfig extends WebMvcConfigurationSupport {
/**
* springboot
* 解決long、bigint轉json丟失精度
*/
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
/**
* 序列換成json時,將所有的long變成string
* 因爲js中得數字類型不能包含所有的java long值
*/
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
jackson2HttpMessageConverter.setObjectMapper(objectMapper);
converters.add(jackson2HttpMessageConverter);
}
}