Java序列化JSON丟失精度問題的解決方法(修復(fù)Long類型太長(zhǎng))
Java序列化JSON時(shí)long型數(shù)值,會(huì)出現(xiàn)精度丟失的問題。
原因:
java中得long能表示的范圍比js中number大,也就意味著部分?jǐn)?shù)值在js中存不下(變成不準(zhǔn)確的值).
解決辦法一:
使用ToStringSerializer的注解,讓系統(tǒng)序列化時(shí),保留相關(guān)精度
@JsonSerialize(using=ToStringSerializer.class) private Long createdBy;
上述方法需要在每個(gè)對(duì)象都配上該注解,此方法過于繁鎖。
解決辦法(二):
使用全局配置,將轉(zhuǎn)換時(shí)實(shí)現(xiàn)自動(dòng)ToStringSerializer序列化
Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); ObjectMapper objectMapper = new ObjectMapper(); /** * 序列換成json時(shí),將所有的long變成string * 因?yàn)閖s中得數(shù)字類型不能包含所有的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); }
方法二比較完美,強(qiáng)烈推薦使用!
補(bǔ)充:后臺(tái)date類型,而返回到前段為long(如后端yyy-mm-dd hh:mm:ss 返回前段為1562566384)
1.在實(shí)體類中在要轉(zhuǎn)換的字段上加上該注解,如下:
/** 訂單創(chuàng)建時(shí)間 */ @JsonSerialize(using = DateToLongSerializer.class) private Date createTiem;
2.并指定一個(gè)格式化的類。如下:
public class DateToLongSerializer extends JsonSerializer<Date> { @Override public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeNumber(date.getTime() / 1000); } }
@JsonIgnore 該注解的作用是轉(zhuǎn)成json時(shí)不返回給前端
總結(jié)
到此這篇關(guān)于Java序列化JSON丟失精度問題的解決方法的文章就介紹到這了,更多相關(guān)Java序列化JSON丟失精度內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
StackTraceElement獲取方法調(diào)用棧信息實(shí)例詳解
這篇文章主要介紹了StackTraceElement獲取方法調(diào)用棧信息實(shí)例詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02解決RestTemplate 請(qǐng)求url中包含百分號(hào) 會(huì)被轉(zhuǎn)義成25的問題
這篇文章主要介紹了解決RestTemplate 請(qǐng)求url中包含百分號(hào) 會(huì)被轉(zhuǎn)義成25的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2021-10-10JAVA如何轉(zhuǎn)換樹結(jié)構(gòu)數(shù)據(jù)代碼實(shí)例
這篇文章主要介紹了JAVA如何轉(zhuǎn)換樹結(jié)構(gòu)數(shù)據(jù)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Java實(shí)現(xiàn)將PDF轉(zhuǎn)為圖片格式的方法詳解
PDF文件和圖片文件,這是兩種完全不一樣的格式,可是有的時(shí)候這兩種格式卻是有相互轉(zhuǎn)換的需要,本文將介紹如何通過Java應(yīng)用程序快速高效地將PDF轉(zhuǎn)為圖片格式。一起來看看吧2023-03-03java 全角半角字符轉(zhuǎn)換如何實(shí)現(xiàn)
在java中可能會(huì)用到過全角半角字符轉(zhuǎn)換問題,于是網(wǎng)上搜索整理了一下,曬出來和大家分享,希望可以幫助你們2012-12-12springboot定時(shí)任務(wù)備份mysql數(shù)據(jù)庫的實(shí)現(xiàn)示例
為了防止數(shù)據(jù)庫被清庫或者誤刪數(shù)據(jù)庫的情況,所以需要定時(shí)將mysql數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行備份,本文主要介紹了springboot定時(shí)任務(wù)備份mysql數(shù)據(jù)庫的實(shí)現(xiàn)示例,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-03-03Spring init-method與destroy-method屬性的用法解析
這篇文章主要介紹了Spring init-method與destroy-method屬性的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08