SpringBoot使用ObjectMapper之Long和BigDemical類型的屬性字符串處理,防止前端丟失數值精度

SpringBoot使用ObjectMapper之Long和BigDemical類型的屬性字符串處理,防止前端丟失數值精度!

方式一:注解

使用注解 @JsonFormat(shape = JsonFormat.Shape.STRING),如下:

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;
import java.math.BigDecimal;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Demo implements Serializable {private static final long serialVersionUID = -2148559076064821626L;@JsonFormat(shape = JsonFormat.Shape.STRING)private Long id;@JsonFormat(shape = JsonFormat.Shape.STRING)private BigDecimal price;
}

測試

    @Autowiredprotected ObjectMapper objectMapper;@Testpublic void objectMapperTest() throws Exception {Demo demo = new Demo(Long.MAX_VALUE, new BigDecimal("12.34"));System.out.println(objectMapper.writeValueAsString(demo));demo = objectMapper.readValue("{\"id\":\"9223372036854775807\",\"price\":123.4}", Demo.class);System.out.println(objectMapper.writeValueAsString(demo));}

輸出

{"id":"9223372036854775807","price":"12.34"}
{"id":"9223372036854775807","price":"123.4"}

方式二:自定義序列化轉換器

自定義序列化轉換器代碼

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;import java.io.IOException;public class MyNumberSerializer extends StdSerializer<Number> {private static final long serialVersionUID = -4714217911586331902L;public MyNumberSerializer() {super(Number.class);}@Overridepublic void serialize(Number value, JsonGenerator gen, SerializerProvider provider) throws IOException {gen.writeString(value.toString());}
}

使用自定義序列化轉換器

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;
import java.math.BigDecimal;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Demo implements Serializable {private static final long serialVersionUID = -2148559076064821626L;@JsonSerialize(using = MyNumberSerializer.class)private Long id;@JsonSerialize(using = MyNumberSerializer.class)private BigDecimal price;
}

想在所有實體類中生效而避免添加注解:@JsonSerialize(using = MyNumberSerializer.class),可使用全局配置,如下:

    @Autowiredprotected ObjectMapper objectMapper;@Beforepublic void beforeTest() {// 全局配置SimpleModule module = new SimpleModule();module.addSerializer(Long.class, new MyNumberSerializer());module.addSerializer(BigDecimal.class, new MyNumberSerializer());objectMapper.registerModule(module);}@Testpublic void objectMapperTest() throws Exception {Demo demo = new Demo(Long.MAX_VALUE, new BigDecimal("12.34"));System.out.println(objectMapper.writeValueAsString(demo));demo = objectMapper.readValue("{\"id\":9223372036854775807,\"price\":\"123.4\"}", Demo.class);System.out.println(objectMapper.writeValueAsString(demo));}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164319.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164319.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164319.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在arm 64 環境下使用halcon算法

背景&#xff1a; halcon&#xff0c;機器視覺領域神一樣得存在&#xff0c;在windows上&#xff0c;應用得特別多&#xff0c; 但是arm環境下使用得很少。那如何在arm下使用halcon呢。按照官方說明&#xff0c;arm下只提供了運行時環境&#xff0c;并且需要使用價值一萬多人民…

設計高手的秘密武器:5款讓平面作品更出彩的軟件

平面設計是一種迷人而多樣化的藝術形式&#xff0c;它結合了顏色、形狀、排版和創造力&#xff0c;通過圖像和文本傳達信息。市場上有各種各樣的平面設計軟件&#xff0c;選擇合適的設計軟件是成為優秀設計師的重要一步。為了降低軟件成本&#xff0c;大多數設計師會優先使用免…

編譯原理之LL(1)語法分析實驗(附完整C/C++代碼與測試)

一、實驗內容與要求 先從鍵盤讀入要分析的文法&#xff0c;由程序自動構造FIRST、FOLLOW 集以及SELECT集合&#xff0c;判斷是否為LL (1)文法。 分析文法為G[E]&#xff1a; &#xff08;0&#xff09;E→ TE’ &#xff08;1&#xff09;E’→ TE’ &#xff08;2&#xff…

軟件開發王者搭配:80%低代碼+20%高代碼

數字化領域從來不缺新概念&#xff0c;前兩年市場大談云原生、技術中臺、業務中臺等概念&#xff0c;企業更多聚焦在業務與IT架構的升級。而這兩年&#xff0c;隨著低代碼、生成式AI的盛行&#xff0c;大家則開始挖掘數字化應用的低成本建設模式。 在過去&#xff0c;開發一套系…

Linux 是否被過譽了?

Linux 是否被過譽了&#xff1f; 有些人眼里&#xff0c;電腦這種東西就應該是華麗麗的桌面&#xff0c;手握鼠標戳戳按鈕&#xff0c;鍵盤只為偶爾打打字&#xff0c;仿佛windows式的桌面形式才是理所應當&#xff0c;GUI才是理所應當&#xff0c;x86才是理所應當&#xff0c…

使用 NVProf 檢測 CUDA kernel 的 bank conflict

使用 NVProf 檢測 CUDA kernel 的 bank conflict NVProf 指令 使用 NVProf 可以對 bank conflict 進行檢測: nvprof --events shared_ld_bank_conflict,shared_st_bank_conflict <app> [args...]其中: --events 選項指定的 shared_ld_bank_conflict,shared_st_bank_c…

python -opencv 中值濾波 ,均值濾波,高斯濾波實戰

python -opencv 中值濾波 &#xff0c;均值濾波&#xff0c;高斯濾波實戰 cv2.blur-均值濾波 cv2.medianBlur-中值濾波 cv2.GaussianBlur-高斯濾波 直接看代碼吧&#xff0c;代碼很簡單&#xff1a; import copy import math import matplotlib.pyplot as plt import matp…

c++的更嚴格的類型轉換要求

C有更嚴格的類型轉換要求 C中對類型轉換有嚴格的要求&#xff0c;需要的類型和給的類型不 一致時可能會編譯報錯 例如&#xff1a; C語言中 #include<stdio.h> #include<stdlib.h> //全局變量 //C語言中的函數的形參的類型可以不寫&#xff0c;沒有返回值可以返回&…

聯發科正在改寫全球高端手機芯片市場格局

全球高端手機芯片市場正在重塑。 11 月 21 日&#xff0c;聯發科發布了新一代卓越 5G 生成式 AI 移動芯片天璣 8300。 這款定位于中端機檔位的芯片&#xff0c;無論在技術架構還是在實際性能表現上&#xff0c;都實現了對前代旗艦芯片的趕超&#xff0c;徹底打破了業內長期存…

相機和濾鏡應用程序Nevercenter CameraBag Photo mac軟件特點說明

Nevercenter CameraBag Photo mac是一款相機和濾鏡應用程序&#xff0c;它提供了一系列先進的濾鏡、調整工具和預設&#xff0c;可以幫助用戶快速地優化和編輯照片。 Nevercenter CameraBag Photo mac軟件特點 1. 濾鏡&#xff1a;Nevercenter CameraBag Photo提供了超過200種…

復費率電表和預付費電表有哪些區別?

隨著科技的發展和能源管理的日益嚴格&#xff0c;電表技術也在不斷更新換代。復費率電表和預付費電表作為兩種主流的智能電表&#xff0c;各自具有獨特的優勢和應用場景。接下來&#xff0c;小編來為大家詳細解析這兩種電表的區別及其應用場景。 一、復費率電表 1.定義及工作原…

計算機精度導致各種誤差,大數吃小數

如果 p ? p^* p?是p的近似, ∣ p ? ? p ∣ |p^*-p| ∣p??p∣是絕對誤差, ∣ p ? ? p ∣ / ∣ p ∣ |p^*-p|/|p| ∣p??p∣/∣p∣是相對誤差 舍入誤差,就是數據表示精度不足帶來的誤差 a0.1234564≈0.123456fl(a) b0.1234546≈0.123455fl(b) 在上面發生了舍入誤差 f…

力扣labuladong一刷day15天K個一組翻轉鏈表與回文鏈表

力扣labuladong一刷day15天K個一組翻轉鏈表與回文鏈表 一、25. K 個一組翻轉鏈表 題目鏈接&#xff1a;https://leetcode.cn/problems/reverse-nodes-in-k-group/ 思路&#xff1a;k個一組翻轉鏈表&#xff0c;每k個翻轉抽取出一個單獨的方法reverse&#xff0c;翻轉a到b&…

力扣刷題第二十九天--二叉樹

前言 問問自己&#xff0c;刷題的效果真的達到了嗎&#xff1f; 內容 一、翻轉二叉樹 226.翻轉二叉樹 給你一棵二叉樹的根節點 root &#xff0c;翻轉這棵二叉樹&#xff0c;并返回其根節點。 遞歸 func invertTree(root *TreeNode) *TreeNode {if rootnil{return root}…

Vue中的$nextTick的作用

在 Vue 中&#xff0c;當某些數據發生變化時&#xff0c;DOM 并不會立即更新。相反&#xff0c;Vue 會在下一個事件循環周期&#xff08;microtask&#xff09;中異步執行更新&#xff0c;這樣可以避免頻繁的 DOM 操作。然而&#xff0c;有時候我們需要在 DOM 更新后執行一些操…

2024-NeuDS-數據庫題目集

一.判斷題 1.在數據庫中產生數據不一致的根本原因是冗余。T 解析&#xff1a;數據冗余是數據庫中產生數據不一致的根本原因&#xff0c;因為當同一數據存儲在多個位置時&#xff0c;如果其中一個位置的數據被修改&#xff0c;其他位置的數據就不一致了。因此&#xff0c;在數據…

11.docker的網絡-docker0的理解及bridge網橋模式的介紹與實例

1.docker0的基本理解 安裝完docker服務后&#xff0c;我們首先查看一下宿主機的網絡配置 ifconfig我們可以看到&#xff0c;docker服務會默認在宿主機上創建一個虛擬網橋docker0&#xff0c;該網橋網絡的名字稱為docker0。它在內核層連通了其他物理或者虛擬網卡&#xff0c;這…

ubuntu22.04系統下載程序和依賴,并拷貝到指定路徑下

腳本1 apt install aptitude apt-get -d install xxx #xxx是待下載的安裝包 mv /var/cache/apt/archives/* /home/tuners/1apt install aptitude apt-get -d install xxx mv /var/cache/apt/archives/*.deb /home/tuners/1 xxx 為程序包名稱 /home/tuners/1為保存程序包的…

從零開始的搭建指南:開發高效的抖音預約服務小程序

預約服務小程序提高了效率&#xff0c;節省了用戶時間。下文&#xff0c;小編將與大家一同探討如何從零開始打造預約服務小程序。 第一步&#xff1a;明確需求和目標 確定你的小程序主要服務領域是什么&#xff1f;是醫療預約、美容美發、餐廳預訂還是其他行業&#xff1f;明…

Python 如何開發出RESTful Web接口,DRF框架助力靈活實現!

Django Rest Framework&#xff08;DRF&#xff09;是構建強大且靈活的Web API的優秀工具。它基于Django&#xff0c;提供了一套用于構建Web API的組件和工具&#xff0c;簡化了API開發過程&#xff0c;同時保留了Django的優雅和強大。 一、Web應用模式 在開發Web應用時&…