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!

推薦閱讀: