SpringBoot全局配置long轉String丟失精度的問題解決
web項目中,Java後端傳過來的Long/long類型,前端JS接收會丟失精度。
本文推薦第三、第四種方式
第一種方式
簡單粗暴,將所有的Lang類型,改為String,數據庫改成varchar類型;
第二種方式
自己建個配置類
extends WebMvcConfigurerAdapter 已經被棄用,直接實現WebMvcConfigurer該接口就行瞭
@EnableWebMvc @Configuration public class WebDataConvertConfig implements WebMvcConfigurer { 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); }
第三種方式
使用Jackson2
@Configuration public class JacksonConfig { /** * Jackson全局轉化long類型為String,解決jackson序列化時long類型缺失精度問題 * @return Jackson2ObjectMapperBuilderCustomizer 註入的對象 */ @Bean public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder .serializerByType(Long.class, ToStringSerializer.instance) .serializerByType(Long.TYPE, ToStringSerializer.instance); } }
第四種方式(缺點:將所有的數字類型都會轉為字符串)
bootstrap.yml添加以下配置:
spring: jackson: #將所有的number類型轉為String返回 generator: write_numbers_as_strings: true #格式化返回時間 yyyy-MM-dd HH:mm:ss date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8
到此這篇關於SpringBoot全局配置long轉String丟失精度的問題解決的文章就介紹到這瞭,更多相關SpringBoot long轉String丟失精度內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- SpringBoot返回對象時,如何將Long類型轉換為String
- java Long類型轉為json後數據損失精度的處理方式
- springboot中使用FastJson解決long類型在js中失去精度的問題
- SpringBoot2.0解決Long型數據轉換成json格式時丟失精度問題
- 解析Spring Mvc Long類型精度丟失問題