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