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

SpringBoot基于Jackson解決Long型長(zhǎng)度丟失問(wèn)題

 更新時(shí)間:2025年08月21日 09:18:36   作者:future romance  
本文主要介紹了SpringBoot基于Jackson解決Long型長(zhǎng)度丟失問(wèn)題,通過(guò)自定義Jackson ObjectMapper子類添加String序列化器,并在SpringMVC配置中注冊(cè)該轉(zhuǎn)換器,使ID在JSON傳輸中保持完整,與數(shù)據(jù)庫(kù)數(shù)據(jù)一致

問(wèn)題背景

JavaScript能處理的數(shù)據(jù)精度有限,長(zhǎng)度一旦超過(guò)17位就會(huì)發(fā)生長(zhǎng)度丟失。因此,id值在被序列化為JSON時(shí)經(jīng)常會(huì)有后幾位與原數(shù)據(jù)匹配不上的問(wèn)題。

數(shù)據(jù)庫(kù)中的數(shù)據(jù)

可以發(fā)現(xiàn)頁(yè)面拿到的數(shù)據(jù)的id值和數(shù)據(jù)庫(kù)中的id值最后兩位不一致

為了解決該問(wèn)題,可以將Long型轉(zhuǎn)化為String
可利用jackson的ObjectMapper來(lái)實(shí)現(xiàn)

解決方法

ObjectMapper(對(duì)象轉(zhuǎn)換器),是jackson中的一個(gè)類,它實(shí)現(xiàn)了java對(duì)象到JSON之間的轉(zhuǎn)換(序列化、反序列化)。

當(dāng)ObjectMapper中固有的序列化器(或反序列化器)不能滿足我們的需求時(shí),我們需要自定義一個(gè)對(duì)象轉(zhuǎn)換器,即創(chuàng)建 ObjectMapper 的子類,為其添加新的序列化器,例如 (Long --> String) 的序列化器

實(shí)現(xiàn)步驟

1. 自定義對(duì)象轉(zhuǎn)換器,添加序列化器(或反序列化器)

2. 將該對(duì)象轉(zhuǎn)換器加入到 SpringMVC 的消息轉(zhuǎn)換器隊(duì)列中

自定義的對(duì)象轉(zhuǎn)換器即為ObjectMapper的子類,為其添加序列化器

/**
 * 對(duì)象轉(zhuǎn)換器 ObjectMapper:基于jackson將Java對(duì)象轉(zhuǎn)為json(序列化),或者將json轉(zhuǎn)為Java對(duì)象(反序列化)
 *
 *          ObjectMapper中固有的序列化器(或反序列化器)可能不能滿足我們的需求
 *      因此需要?jiǎng)?chuàng)建 ObjectMapper 的子類,自定義新的序列化器,例如 Long --> String 的序列化器
 *
 */
public class JacksonObjectMapper extends ObjectMapper {

    public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
    public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";

    public JacksonObjectMapper() {
        super();
        //收到未知屬性時(shí)不報(bào)異常
        this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);

        //反序列化時(shí),屬性不存在的兼容處理
        this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

        // SimpleModule對(duì)象,添加各種序列化器和反序列化器
        SimpleModule simpleModule = new SimpleModule()
                // 添加反序列化器
                .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))

                // 添加序列化器
                .addSerializer(BigInteger.class, ToStringSerializer.instance)
                .addSerializer(Long.class, ToStringSerializer.instance)   // 實(shí)現(xiàn) Long --> String 的序列化器
                .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));

        // 對(duì)自定義的 simpleModule 進(jìn)行注冊(cè)
        this.registerModule(simpleModule);
    }
}

現(xiàn)在已經(jīng)創(chuàng)建出了自定義的對(duì)象轉(zhuǎn)換器,但還無(wú)法生效,需要對(duì)它進(jìn)行相關(guān)配置

在WebMVC配置類中,重寫extendMessageConverters方法,將自定義的對(duì)象轉(zhuǎn)換器加入到消息轉(zhuǎn)換器隊(duì)列中,使其生效

/**
     * 擴(kuò)展 Spring MVC 的消息轉(zhuǎn)換器
     *
     *      將自定義的對(duì)象轉(zhuǎn)換器 JacksonObjectMapper 加入到 SpringMVC 的消息轉(zhuǎn)換器隊(duì)列中
     *
     * @param converters
     */
    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        log.info("擴(kuò)展消息轉(zhuǎn)換器......");

        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();

        messageConverter.setObjectMapper(new JacksonObjectMapper());

        converters.add(0, messageConverter);

    }

再次測(cè)試結(jié)果如下

可以發(fā)現(xiàn)此時(shí)頁(yè)面拿到的id值都已經(jīng)變成了String,而且與數(shù)據(jù)庫(kù)中的id值完全一致

如此,便解決了Long型長(zhǎng)度丟失問(wèn)題

到此這篇關(guān)于SpringBoot基于Jackson解決Long型長(zhǎng)度丟失問(wèn)題的文章就介紹到這了,更多相關(guān)SpringBoot Long型長(zhǎng)度丟失內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java多態(tài)概念、實(shí)現(xiàn)機(jī)制與實(shí)踐應(yīng)用詳解

    Java多態(tài)概念、實(shí)現(xiàn)機(jī)制與實(shí)踐應(yīng)用詳解

    多態(tài)是指同一個(gè)方法在不同對(duì)象上具有不同的行為,通過(guò)多態(tài)程序可以在運(yùn)行時(shí)決定調(diào)用哪個(gè)方法,從而提高代碼的靈活性和可擴(kuò)展性,這篇文章主要介紹了Java多態(tài)概念、實(shí)現(xiàn)機(jī)制與實(shí)踐應(yīng)用的相關(guān)資料,需要的朋友可以參考下
    2026-01-01
  • mybatis-plus與JPA混合的使用方式

    mybatis-plus與JPA混合的使用方式

    這篇文章主要介紹了mybatis-plus與JPA混合的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java實(shí)現(xiàn)時(shí)間和字符串互轉(zhuǎn)

    Java實(shí)現(xiàn)時(shí)間和字符串互轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Java實(shí)現(xiàn)時(shí)間對(duì)象和字符串互相轉(zhuǎn)換,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • Java之String[] args含義及作用

    Java之String[] args含義及作用

    這篇文章主要介紹了Java之String[] args含義及作用,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java并發(fā)編程之CountDownLatch的使用

    Java并發(fā)編程之CountDownLatch的使用

    CountDownLatch是一個(gè)倒數(shù)的同步器,常用來(lái)讓一個(gè)線程等待其他N個(gè)線程執(zhí)行完成再繼續(xù)向下執(zhí)行,本文主要介紹了CountDownLatch的具體使用方法,感興趣的可以了解一下
    2023-05-05
  • Java之格式化輸出實(shí)踐

    Java之格式化輸出實(shí)踐

    這篇文章主要介紹了Java之格式化輸出過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2026-04-04
  • java必學(xué)必會(huì)之this關(guān)鍵字

    java必學(xué)必會(huì)之this關(guān)鍵字

    java必學(xué)必會(huì)之this關(guān)鍵字,java中this的用法進(jìn)行了詳細(xì)的分析介紹,感興趣的小伙伴們可以參考一下
    2015-12-12
  • 如何解決Could not transfer artifact org.springframework.boot問(wèn)題

    如何解決Could not transfer artifact org.spri

    在Maven更新過(guò)程中遇到“Could not transfer artifact org.springframework.boot”錯(cuò)誤通常是由于網(wǎng)絡(luò)問(wèn)題,解決方法是在Maven的設(shè)置中忽略HTTPS,添加特定語(yǔ)句后,可以正常下載依賴,但下載速度可能較慢,這是一種常見的解決方案,希望對(duì)遇到相同問(wèn)題的人有所幫助
    2024-09-09
  • JAVA設(shè)計(jì)模式之建造者模式原理與用法詳解

    JAVA設(shè)計(jì)模式之建造者模式原理與用法詳解

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之建造者模式,簡(jiǎn)單說(shuō)明了建造者模式的原理、組成,并結(jié)合實(shí)例形式分析了java建造者模式的定義與用法,需要的朋友可以參考下
    2017-08-08
  • Spring?MVC各種參數(shù)進(jìn)行封裝的方法實(shí)例

    Spring?MVC各種參數(shù)進(jìn)行封裝的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Spring?MVC各種參數(shù)進(jìn)行封裝的相關(guān)資料,SpringMVC內(nèi)置多種數(shù)據(jù)類型轉(zhuǎn)換器,可以根據(jù)請(qǐng)求中的參數(shù)與后端控制器方法的參數(shù)的關(guān)系為我們實(shí)現(xiàn)簡(jiǎn)單的數(shù)據(jù)封裝,需要的朋友可以參考下
    2023-06-06

最新評(píng)論

四川省| 南宫市| 田阳县| 永年县| 合肥市| 肇庆市| 绵阳市| 商洛市| 彭阳县| 万盛区| 喜德县| 通江县| 兴山县| 白银市| 彰武县| 临城县| 紫金县| 莒南县| 双峰县| 陕西省| 辽阳县| 虎林市| 平潭县| 龙州县| 盘山县| 临清市| 精河县| 木兰县| 青铜峡市| 镇雄县| 巩义市| 林甸县| 沅陵县| 涞水县| 长治市| 北票市| 汽车| 米易县| 攀枝花市| 乌兰浩特市| 浪卡子县|