Redis使用用fastjson序列化的兩個坑 autoType is not suppor異常和類型轉換異常


第一個坑 autoType is not suppor異常

在這里插入圖片描述
從報錯信息上看到,是阿里巴巴的fastjson報的錯。
我debug了一下,發現redis讀取出的數據全是 jsonObject對象,而不是我想要的Objec對象,肯定轉換錯誤了。
我已經配置好了redis序列化,難道還讓我用 jsonObject對象 再 轉換一次?
這不能忍 🙌

我又聽了隔壁大神的意見。
隔壁大神說:
fastjson為了安全打開AutoType功能 在1.2.25之后的版本,以及所有的.sec01后綴版本中,autotype功能是受限的。
所以我們需要自己開放AutoType功能的白名單;

解決有三種方式

添加白名單有三種方式,三選一,如下:

  1. 在代碼中配置,配置fastjson時直接加上。
ParserConfig.getGlobalInstance().addAccept("com.zry.simpleblog2.");

如果有多個包名前綴,分多次addAccept

  1. 加上JVM啟動參數
-Dfastjson.parser.autoTypeAccept=com.taobao.pac.client.sdk.dataobject.,com.cainiao. 

如果有多個包名前綴,用逗號隔開

  1. 通過fastjson.properties文件配置。
    在1.2.25/1.2.26版本支持通過類路徑的fastjson.properties文件來配置,配置方式如下:
fastjson.parser.autoTypeAccept=com.taobao.pac.client.sdk.dataobject.,com.cainiao. 

如果有多個包名前綴,用逗號隔開

我直接使用第一種方法。完美解決。

第二個坑 類型轉換異常

我springboot開發時 ctrl+F9 經常使用,熱加載功能很方便。但是這一天在使用Springboot 配合 Redis做緩存處理的時出現了問題
我一使用熱加載 ,就報出類型轉換異常,最可笑的是同一類型轉換出了錯?
下面是報錯信息:
在這里插入圖片描述
網上又是一頓搜:
大概意思說是spring-boot devtools工具的問題,由於devtools導致服務重啟,然后重啟后ClassLoad和原來的ClassLoader不是同一個對象了,所以導致對象的Class也不一樣,雖然看上去都是User,但是它就是不同的類型,因為它的Class也不相等。
我也在官網上發現了這個:
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using.devtools.livereload
在這里插入圖片描述
這應該是給出了解決思路。

解決方案:

我直接不是用熱加載,完全解決(不是)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM