最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中Long類型傳入前端數(shù)值出錯(cuò)問題

 更新時(shí)間:2024年04月24日 11:54:35   作者:蘇染3  
這篇文章主要介紹了Java中Long類型傳入前端數(shù)值出錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1.問題描述

做數(shù)據(jù)資產(chǎn)交易項(xiàng)目發(fā)現(xiàn),在列表點(diǎn)擊詳情時(shí),沒有得到對(duì)應(yīng)的詳情頁面,從后端請(qǐng)求數(shù)據(jù)部分都為空

通過查看網(wǎng)絡(luò)請(qǐng)求看到,請(qǐng)求的data值時(shí)null,而不是對(duì)應(yīng)的詳情數(shù)據(jù),

查看請(qǐng)求,發(fā)現(xiàn)請(qǐng)求對(duì)應(yīng)的id并不是產(chǎn)品的id,最后幾位數(shù)值出現(xiàn)錯(cuò)誤,之后在數(shù)據(jù)列表的響應(yīng)中發(fā)現(xiàn),數(shù)據(jù)的id也都是錯(cuò)誤的,都是在第16位或者第17位進(jìn)行了四舍五入,后續(xù)數(shù)字都為0。

之后找到的問題的根源,在mysql數(shù)據(jù)庫中,Java中的Long類型對(duì)應(yīng)其中的bigInt類型,支持20位,而前端接收Long類型的數(shù)值(超過16位)時(shí),會(huì)對(duì)第16位進(jìn)行四舍五入,17位及之后補(bǔ)0,因此造成數(shù)值出錯(cuò)。

2.解決辦法

在通過查找后,找到了對(duì)應(yīng)的解決辦法,均為將后端的返回值中的id轉(zhuǎn)化位String類型,下列為具體解決辦法。

2.1 修改id的類型為String

這種方法并不是很好,因?yàn)閕d的Long類型,對(duì)應(yīng)數(shù)據(jù)庫中的bigInt類型,數(shù)據(jù)庫中一般都使用bigInt來表示id,因此這樣修改會(huì)導(dǎo)致之后會(huì)有很多地方需要修改,因此并不推薦

2.2 在id進(jìn)行序列化時(shí),以String形式序列化

這種方法并沒有上述方法的問題

2.2.1 使用StringBoot的Jackson依賴中包

  • 單個(gè)數(shù)據(jù)

此處使用的為Jackson下的ToStringSerializer

    @JsonSerialize(using = ToStringSerializer.class)
    private Long productId;
  • 針對(duì)所有的Long類型數(shù)據(jù)(將所有的Long類型的數(shù)據(jù)改變的序列化方式)

通過添加配置類來解決這個(gè)問題

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
 
@Configuration
public class JacksonConfig {
     @Bean
     @Primary
     @ConditionalOnMissingBean(ObjectMapper.class)
     public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
         ObjectMapper objectMapper = builder.createXmlMapper(false).build();
         SimpleModule simpleModule = new SimpleModule();
         //Long類型----String
         simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
         objectMapper.registerModule(simpleModule);
         return objectMapper;
    }
}

2.2.2 使用FastJson

  • 單個(gè)數(shù)據(jù)

此處使用的為FastJSON下的ToStringSerializer

    @JSONField(serializeUsing = ToStringSerializer.class)
    private Long productId;
  • 多個(gè)數(shù)據(jù)

通過重寫WebMvcConfigurer中的configureMessageConverters方法重新配置轉(zhuǎn)換器

import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.ToStringSerializer;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class CustomFastJsonConfig {
    @Bean
    FastJsonHttpMessageConverter fastJsonHttpMessageConverter() {
        //1.定義convert轉(zhuǎn)換消息的對(duì)象
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        //2.添加fastJson的配置信息
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        //3.設(shè)置Long為字符串
        SerializeConfig serializeConfig = SerializeConfig.globalInstance;
        serializeConfig.put(Long.class, ToStringSerializer.instance);
        serializeConfig.put(Long.TYPE, ToStringSerializer.instance);
        fastJsonConfig.setSerializeConfig(serializeConfig);
        //4.在convert中添加配置信息.
        converter.setFastJsonConfig(fastJsonConfig);
        return converter;
    }
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot自動(dòng)初始化數(shù)據(jù)庫的方法分享

    SpringBoot自動(dòng)初始化數(shù)據(jù)庫的方法分享

    我們?cè)陧?xiàng)目中應(yīng)該經(jīng)常遇到過初始化數(shù)據(jù)的場景,特別是項(xiàng)目部署或者交付的時(shí)候,那么有什么方式可以在項(xiàng)目啟動(dòng)的時(shí)候自動(dòng)初始化數(shù)據(jù)庫呢,下面小編就來和大家分享幾個(gè)方法吧
    2023-08-08
  • Java程序結(jié)構(gòu)與常量變量難點(diǎn)解析

    Java程序結(jié)構(gòu)與常量變量難點(diǎn)解析

    JAVA的基本結(jié)構(gòu)就是順序結(jié)構(gòu),除非特別指明,否則就按照順序一句一句執(zhí)行順序結(jié)構(gòu)是最簡單的算法結(jié)構(gòu),語句與語句之間,框與框之間是按從上到下的順序進(jìn)行的,它是由若干個(gè)依次執(zhí)行的處理步驟組成的,它是任何一個(gè)算法都離不開的一種基本算法結(jié)構(gòu)
    2021-10-10
  • SpringMVC實(shí)現(xiàn)Controller的三種方式總結(jié)

    SpringMVC實(shí)現(xiàn)Controller的三種方式總結(jié)

    這篇文章主要介紹了SpringMVC實(shí)現(xiàn)Controller的三種方式總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Spring?JDBC?框架簡介

    Spring?JDBC?框架簡介

    Spring?JDBC?提供幾種方法和數(shù)據(jù)庫中相應(yīng)的不同的類與接口。我將給出使用JdbcTemplate類框架的經(jīng)典和最受歡迎的方法。本文給大家介紹Spring?JDBC?框架的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-12-12
  • 一文詳解JavaWeb過濾器(Filter)

    一文詳解JavaWeb過濾器(Filter)

    本文主要介紹了一文詳解JavaWeb過濾器(Filter),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • java實(shí)現(xiàn)數(shù)字炸彈

    java實(shí)現(xiàn)數(shù)字炸彈

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)數(shù)字炸彈,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 簡單了解java ORM框架JOOQ

    簡單了解java ORM框架JOOQ

    這篇文章主要介紹了簡單了解java ORM框架JOOQ,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 多模塊項(xiàng)目使用枚舉配置spring-cache緩存方案詳解

    多模塊項(xiàng)目使用枚舉配置spring-cache緩存方案詳解

    這篇文章主要為大家介紹了多模塊項(xiàng)目使用枚舉配置spring-cache緩存的方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 深入淺析Java 虛擬線程

    深入淺析Java 虛擬線程

    Java21引入了虛擬線程,這是一種輕量級(jí)線程,適用于IO密集型的應(yīng)用,可以極大提高應(yīng)用的性能和吞吐量,虛擬線程是由傳統(tǒng)線程執(zhí)行的,由JVM控制上下文切換,創(chuàng)建和銷毀的開銷小,適用于高并發(fā)場景,本文介紹Java 虛擬線程的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • 使用java?-jar修改SpringBoot中application.properties的配置項(xiàng)

    使用java?-jar修改SpringBoot中application.properties的配置項(xiàng)

    這篇文章主要介紹了使用java?-jar修改SpringBoot中application.properties的配置項(xiàng)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評(píng)論

永新县| 石阡县| 香港| 深圳市| 宝鸡市| 石门县| 宾阳县| 周宁县| 东海县| 阿拉尔市| 汾西县| 资阳市| 松溪县| 涞源县| 祁阳县| 滁州市| 昭通市| 鲜城| 新化县| 沙田区| 镇平县| 麟游县| 苏尼特左旗| 志丹县| 涟水县| 荣成市| 道孚县| 满洲里市| 惠州市| 呈贡县| 于田县| 时尚| 健康| 北京市| 承德县| 平陆县| 镇沅| 乌审旗| 道真| 西贡区| 沧源|