1. 程式人生 > 程式設計 >SpringBoot全域性配置long轉String丟失精度的問題解決

SpringBoot全域性配置long轉String丟失精度的問題解決

目錄
  • 第一種方式
  • 第二種方式
  • 第三種方式
  • 第四種方式(缺點:將所有的數字型別都會轉為字串)

web專案中,後端傳過來的Long/long型別,前端接收會丟失精度。

本文推薦第三、第四種方式

第一種方式

簡單粗暴,將所有的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 http://www.cppcns.com
= 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);
    }
}
Gbkyi

第四種方式(缺點:將所有的數字型別都Gbkyi會轉為字串)

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丟失精度內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!