欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JSON序列化導(dǎo)致Long類型被搞成Integer的坑及解決

 更新時間:2022年01月13日 16:24:43   作者:明明如月學(xué)長  
這篇文章主要介紹了JSON序列化導(dǎo)致Long類型被搞成Integer的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

JSON序列化導(dǎo)致Long類型被搞成Integer的坑

最近遇到一個錯誤,就是某個字段肯定是Long類型的,通過Map<String,Object>方式轉(zhuǎn)成JSON字符串,然后存到了DB的某個字段里。

為了Json存儲字,然后反序列化為Map(不是自定義的常規(guī)對象)

比如某二方為了提供通用的接口能力,將Map<String,Object>的數(shù)據(jù)通過JSON序列化方式緩存然后JSON反序列化拿到Map。

等情況。

用的時候就通過Key獲取對象之后直接強(qiáng)轉(zhuǎn)Long,然后類型轉(zhuǎn)換異常。

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long

上代碼

? ? @Test(expected = ClassCastException.class)
? ? public void testJson() {
? ? ? ? String id = "id";
? ? ? ? String name = "name";
? ? ? ? Long idValue = 3000L;
? ? ? ? Map<String, Object> data = new HashMap<>(2);
? ? ? ? data.put(id, idValue);
? ? ? ? data.put(name, "張三");
?
? ? ? ? Assert.assertEquals(idValue, (Long) data.get(id));
? ? ? ? String jsonString = JSON.toJSONString(data);
?
? ? ? ? // 反序列化時Long被轉(zhuǎn)為了Integer
? ? ? ? Map map = JSON.parseObject(jsonString, Map.class);
? ? ? ? Object idObj = map.get(id);
? ? ? ? Assert.assertTrue(idObj instanceof Integer);
? ? ? ? Assert.assertEquals(idValue, (Long) idObj);
? ? }

沒用通過JSON序列化,雖然類型為Object,但是實(shí)際的類型為Long。

序列化為Json時后,Josn串是沒有 Long類型的,而且反轉(zhuǎn)回來也是Object接收,如果數(shù)字小于Interger的最大值,給轉(zhuǎn)成了Integer!

方案

參見我的 另外一篇文章 JSON 反序列化 Long 變 Integer 或 Double 問題

思考

總之開發(fā)中盡量不要亂用一些對象屬性轉(zhuǎn)換工具,導(dǎo)致屬性漏掉或者轉(zhuǎn)錯。

不要濫用Map或者JSONObject來傳遞參數(shù)。

如果是含Object類型JSON序列化要特別小心上述問題?。?/p>

JSON格式轉(zhuǎn)int/long報(bào)錯

現(xiàn)象:通過查庫(mysql)獲取信息,其中有個字段A的值為int類型的5,然后在前端頁面,把數(shù)據(jù)(json)通過ajax請求到后臺(在前端頁面A的類型為Number),在后臺用Map<String, Object>接收json數(shù)據(jù),此時A的值變?yōu)?.0了,從整型變?yōu)榱烁↑c(diǎn)型。此時轉(zhuǎn)換成int會出現(xiàn)類型轉(zhuǎn)換異常。

問題:從前端頁面?zhèn)鬟f過來的json串,后臺能map接收,再利用map的get()方法獲取相應(yīng)的屬性值,這時當(dāng)屬性類型為int或者long類型時會出現(xiàn)轉(zhuǎn)換異常。

解決方法,先將相應(yīng)的屬性轉(zhuǎn)換成Number類型,再調(diào)用Number對應(yīng)的方法進(jìn)行轉(zhuǎn)換。但有個地方需要注意,需要先判斷該屬性是否為空再進(jìn)行轉(zhuǎn)換,否則會出現(xiàn)NullPointerException。

在這里插入圖片描述

Gson轉(zhuǎn)換導(dǎo)致int轉(zhuǎn)換成double的問題

使用情景:后端返回的json字符串,通過gson處理后,原本是int類型,現(xiàn)在獲取到的是double類型的。

解決:

int i = ((Number)fromJson.get("int")).intValue();
int i = Math.round(Double.parseDouble(fromJson.get("int").toString));

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java正則表達(dá)式匹配不到結(jié)果的解決

    Java正則表達(dá)式匹配不到結(jié)果的解決

    這篇文章主要介紹了Java正則表達(dá)式匹配不到結(jié)果的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 淺談一下Servlet的定義以及運(yùn)行原理

    淺談一下Servlet的定義以及運(yùn)行原理

    相信有很多剛?cè)胄械呐笥褧苫骃ervlet到底是個什么意思,那么這篇文章就來淺談一下到底什么是Servlet,以及Servlet的原理與如何寫一個Servlet,,需要的朋友可以參考下
    2023-03-03
  • Spring之動態(tài)注冊bean的實(shí)現(xiàn)方法

    Spring之動態(tài)注冊bean的實(shí)現(xiàn)方法

    這篇文章主要介紹了Spring之動態(tài)注冊bean的實(shí)現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Java中synchronized的四種用法詳解

    Java中synchronized的四種用法詳解

    這篇文章主要介紹了Java中synchronized的四種用法詳解,當(dāng)我們處理多線程處理同步問題的時候就會用到synchronized這個關(guān)鍵字,下面介紹下synchronized的四種用法,需要的朋友可以參考下
    2024-01-01
  • java中的方法重載知識點(diǎn)總結(jié)

    java中的方法重載知識點(diǎn)總結(jié)

    在本篇文章里小編給大家整理了關(guān)于java中的方法重載知識點(diǎn)總結(jié),有興趣的朋友們可以跟著學(xué)習(xí)參考下。
    2020-02-02
  • java8中forkjoin和optional框架使用

    java8中forkjoin和optional框架使用

    這篇文章主要介紹了java8中forkjoin和optional框架使用心得以及用法講解,需要的朋友參考下吧。
    2017-12-12
  • Java構(gòu)造方法和方法重載詳解

    Java構(gòu)造方法和方法重載詳解

    大家好,本篇文章主要講的是Java構(gòu)造方法和方法重載詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Java實(shí)現(xiàn)DFA算法對敏感詞、廣告詞過濾功能示例

    Java實(shí)現(xiàn)DFA算法對敏感詞、廣告詞過濾功能示例

    本篇文章主要介紹了Java實(shí)現(xiàn)DFA算法對敏感詞、廣告詞過濾功能示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • MyBatis使用注解開發(fā)實(shí)現(xiàn)過程詳解

    MyBatis使用注解開發(fā)實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了MyBatis使用注解開發(fā)實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Java引用類型interface的用法總結(jié)

    Java引用類型interface的用法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了Java中引用類型interface的用法的相關(guān)資料,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一定幫助,感興趣的可以了解一下
    2022-10-10

最新評論