国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

spring Boot處理返回給前端Long類型精度丟失

這篇具有很好參考價值的文章主要介紹了spring Boot處理返回給前端Long類型精度丟失。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

背景

項目中采用springcloud Alibaba技術(shù)開發(fā)分布式系統(tǒng),開發(fā)過程中采用雪花算法生成分布式Id,為Long類型,而Long類型返回給前端,會出現(xiàn)精度丟失問題。

接下來我們主要了解下,如何快速的處理精度丟失的問題

處理方法

第一種:實體Long類型屬性上注解

可以直接在返回實體屬性添加"@JsonSerialize(using = ToStringSerializer.class)"。

# 舉個例子:比如說我們返回一個Student實體。 
@Data
public class Student {

    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;
    
    private String name;
    
    private Integer sex;
}

這種方式缺點比較明顯,分布式系統(tǒng),幾乎所有的id都為Long類型,我們都需要在id添加注解。而且當(dāng)返回id集合時,這種方式并不適用。博主就是遇到這樣的問題,才考慮了采用下面的方法。我們來詳細(xì)下講解下面的方法。

第二種:全局配置

通過@Configuration聲明配置類,編寫下面這段代碼

package com.ruoyi.common.core.web.config;

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;

@Configuration
public class JacksonConfig {

    /**
     * 解決主鍵Long類型返回給頁面時,頁面精度丟失的問題,時間格式化返回
     */
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance)
                .addSerializer(Long.TYPE, ToStringSerializer.instance);
        objectMapper.registerModule(simpleModule);
        return objectMapper;
    }
}

這樣配置后,工程會將所有的Long類型,都轉(zhuǎn)換為String類型返回給前端。新的問題來了,部分Long類型的屬性,前端不需要轉(zhuǎn)換,比如分頁器的total等,我們怎么辦呢?繼續(xù)往下看:

指定部分Long類型屬性在返回前端不轉(zhuǎn)化String

我們先自定義一個序列化器

package com.ruoyi.common.core.web.converter;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;

/**
 * 序列化Long類型
 *
 * @author xianr
 * @date 2023/04/13
 */
public class LongJsonSerializer extends JsonSerializer<Long> {

    @Override
    public void serialize(Long value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
            throws IOException {
        if (value != null) {
            jsonGenerator.writeNumber(value);
        }
    }
}

然后在不需要指定轉(zhuǎn)換的屬性上添加下面的注解

/** 總記錄數(shù) */ 
@JsonSerialize(using = LongJsonSerializer.class)
private long total;

到這里大功告成,有幫助的話,請點個贊,謝謝!

記錄一個小細(xì)節(jié):
如果不生效,確認(rèn)下,是否掃描到@Configuration配置類。文章來源地址http://www.zghlxwxcb.cn/news/detail-787197.html

到了這里,關(guān)于spring Boot處理返回給前端Long類型精度丟失的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包