最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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獲取對象之后直接強轉(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,但是實際的類型為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序列化要特別小心上述問題!!

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

現(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型。此時轉(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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Spring學(xué)習(xí)之聲明式事務(wù)管理

    詳解Spring學(xué)習(xí)之聲明式事務(wù)管理

    這篇文章主要介紹了詳解Spring學(xué)習(xí)之聲明式事務(wù)管理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Java樹形菜單的創(chuàng)建

    Java樹形菜單的創(chuàng)建

    這篇文章主要為大家詳細(xì)介紹了Java圖形用戶界面中樹形菜單的創(chuàng)建樹形菜單的創(chuàng)建,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-10-10
  • Mybatis-Plus字段策略FieldStrategy的使用

    Mybatis-Plus字段策略FieldStrategy的使用

    本文主要介紹了Mybatis-Plus字段策略FieldStrategy的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 詳解關(guān)于IntelliJ IDEA中Schedule for Addition 的問題

    詳解關(guān)于IntelliJ IDEA中Schedule for Addition 的問題

    本篇文章主要介紹了詳解關(guān)于 IntelliJ IDEA 中 Schedule for Addition 的問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • java?socket實現(xiàn)局域網(wǎng)聊天

    java?socket實現(xiàn)局域網(wǎng)聊天

    這篇文章主要為大家詳細(xì)介紹了java?socket實現(xiàn)局域網(wǎng)聊天,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java的異常處理體系詳解

    Java的異常處理體系詳解

    這篇文章主要介紹了Java的異常處理體系,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • IntelliJ IDEA 2020.3 重大特性(新功能一覽)

    IntelliJ IDEA 2020.3 重大特性(新功能一覽)

    這篇文章主要介紹了IntelliJ IDEA 2020.3 重大特性(新功能一覽),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Spring配置與依賴注入基礎(chǔ)詳解

    Spring配置與依賴注入基礎(chǔ)詳解

    依賴注入(Dependency?Injection)和控制反轉(zhuǎn)(Inversion?of?Control)是同一個概念。具體含義是:當(dāng)某個角色(可能是一個Java實例,調(diào)用者)需要另一個角色(另一個Java實例,被調(diào)用者)的協(xié)助時,在?傳統(tǒng)的程序設(shè)計過程中,通常由調(diào)用者來創(chuàng)建被調(diào)用者的實例
    2022-08-08
  • 使用feign服務(wù)調(diào)用添加Header參數(shù)

    使用feign服務(wù)調(diào)用添加Header參數(shù)

    這篇文章主要介紹了使用feign服務(wù)調(diào)用添加Header參數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 程序猿必須要掌握的多線程安全問題之鎖策略詳解

    程序猿必須要掌握的多線程安全問題之鎖策略詳解

    在筆者面試過程時,經(jīng)常會被問到各種各樣的鎖,如樂觀鎖、讀寫鎖等等,非常繁多,在此做一個總結(jié),介紹的內(nèi)容如下,需要的朋友可以參考下
    2021-06-06

最新評論

桐庐县| 徐水县| 凉城县| 济南市| 泰安市| 冕宁县| 武鸣县| 新平| 伊宁市| 西林县| 苏尼特左旗| 曲麻莱县| 讷河市| 甘孜| 蒙自县| 绥中县| 晋州市| 荥经县| 张家口市| 贵德县| 南丰县| 通道| 天门市| 鄯善县| 商水县| 怀化市| 昌宁县| 江达县| 杭锦旗| 溧阳市| 南川市| 三穗县| 平乡县| 托克托县| 齐河县| 德兴市| 永丰县| 永兴县| 南昌县| 南通市| 乌兰察布市|