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

JSON序列化導致Long類型被搞成Integer的坑及解決

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

JSON序列化導致Long類型被搞成Integer的坑

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

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

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

等情況。

用的時候就通過Key獲取對象之后直接強轉Long,然后類型轉換異常。

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被轉為了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類型的,而且反轉回來也是Object接收,如果數(shù)字小于Interger的最大值,給轉成了Integer!

方案

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

思考

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

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

如果是含Object類型JSON序列化要特別小心上述問題!!

JSON格式轉int/long報錯

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

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

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

在這里插入圖片描述

Gson轉換導致int轉換成double的問題

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

解決:

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

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 詳解Spring學習之聲明式事務管理

    詳解Spring學習之聲明式事務管理

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

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

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

    Mybatis-Plus字段策略FieldStrategy的使用

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

    詳解關于IntelliJ IDEA中Schedule for Addition 的問題

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

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

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

    Java的異常處理體系詳解

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

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

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

    Spring配置與依賴注入基礎詳解

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

    使用feign服務調用添加Header參數(shù)

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

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

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

最新評論

北碚区| 清镇市| 闵行区| 卢湾区| 共和县| 南乐县| 类乌齐县| 阳新县| 台北县| 虹口区| 师宗县| 桑植县| 台南市| 唐海县| 根河市| 黑龙江省| 信丰县| 永嘉县| 门源| 景宁| 玉山县| 四子王旗| 中阳县| 迭部县| 恩平市| 修水县| 连山| 屏山县| 南平市| 厦门市| 博乐市| 荣成市| 建昌县| 兴宁市| 普洱| 光山县| 肥乡县| 汝阳县| 安康市| 苍南县| 临邑县|