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)文章
java使用freemarker模板生成html再轉(zhuǎn)為pdf
這篇文章主要為大家詳細(xì)介紹了java如何使用freemarker模板生成html,再利用iText將生成的HTML轉(zhuǎn)換為PDF文件,感興趣的小伙伴可以參考下2025-04-04
關(guān)于Java多線程編程鎖優(yōu)化的深入學(xué)習(xí)
本篇文章是關(guān)于Java多線程編程鎖優(yōu)化的深入學(xué)習(xí)總結(jié)內(nèi)容,對(duì)Java鎖優(yōu)化有興趣的朋友跟著學(xué)習(xí)下吧。2018-01-01
解決在Gradle/IDEA中無法正常使用readLine的問題原因
這篇文章主要介紹了在Gradle/IDEA中無法正常使用readLine的解決方法,原因是由于Gradle的標(biāo)準(zhǔn)輸入默認(rèn)并不與系統(tǒng)標(biāo)準(zhǔn)輸入綁定,需手動(dòng)設(shè)置,需要的朋友可以參考下2021-12-12
Java Synchronized鎖升級(jí)原理及過程剖析
這篇文章主要為大家詳細(xì)介紹一下Java中Synchronized鎖升級(jí)原理及過程,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)學(xué)習(xí)2022-08-08
Java反射通過Getter方法獲取對(duì)象VO的屬性值過程解析
這篇文章主要介紹了Java反射通過Getter方法獲取對(duì)象VO的屬性值過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
java枚舉類的構(gòu)造函數(shù)實(shí)例詳解
這篇文章主要介紹了java枚舉類的構(gòu)造函數(shù)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05
JavaIO?BufferedReader和BufferedWriter使用及說明
這篇文章主要介紹了JavaIO?BufferedReader和BufferedWriter使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
springmvc處理模型數(shù)據(jù)ModelAndView過程詳解
這篇文章主要介紹了springmvc處理模型數(shù)據(jù)ModelAndView過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
Java設(shè)計(jì)模式之狀態(tài)模式(State模式)介紹
這篇文章主要介紹了Java設(shè)計(jì)模式之狀態(tài)模式(State模式)介紹,本文講解了何時(shí)使用狀態(tài)模式、如何使用狀態(tài)模式等內(nèi)容,需要的朋友可以參考下2015-03-03

