第一個坑 autoType is not suppor異常
從報錯信息上看到,是阿里巴巴的fastjson報的錯。
我debug了一下,發現redis讀取出的數據全是 jsonObject對象,而不是我想要的Objec對象,肯定轉換錯誤了。
我已經配置好了redis序列化,難道還讓我用 jsonObject對象 再 轉換一次?
這不能忍 🙌
我又聽了隔壁大神的意見。
隔壁大神說:
fastjson為了安全打開AutoType功能 在1.2.25之后的版本,以及所有的.sec01后綴版本中,autotype功能是受限的。
所以我們需要自己開放AutoType功能的白名單;
解決有三種方式
添加白名單有三種方式,三選一,如下:
- 在代碼中配置,配置fastjson時直接加上。
ParserConfig.getGlobalInstance().addAccept("com.zry.simpleblog2.");
如果有多個包名前綴,分多次addAccept
- 加上JVM啟動參數
-Dfastjson.parser.autoTypeAccept=com.taobao.pac.client.sdk.dataobject.,com.cainiao.
如果有多個包名前綴,用逗號隔開
- 通過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
這應該是給出了解決思路。
解決方案:
我直接不是用熱加載,完全解決(不是)。