使用xstream時,實體類轉化出現的問題

xstream“強轉自己(Object->TypeA)”報錯:

com.****.TypeA can not be cast to com.****.TypeA

原因:

存儲的是 TypeA 經過 Java 標準序列化後的內容,取值時返回的是 Object,需要強轉爲 TypeA。本來很簡單的邏輯,但是出現異常了,異常爆出 TypeA 不能轉爲 TypeA,我們倆再三確認了一下,類名沒有寫錯。

我想到以前我看過的一本書上(忘了從哪本書看的了)說:Java 中,判斷兩個類型是否相同需要:1.兩個類有相同的限定名;2.兩個類由同一類加載器實例加載。既然類限定名是沒有問題的,那麼只能說明要強轉成的 TypeA 和從中取回的 TypeA(Java 標準反序列化生成的實例的 class)不是由同一類加載器實例加載的。

實例場景:

最近在使用xstream時發現同一個實體類不能相互轉化,最後發現在SpringBoot

中使用 xstream不會自動裝載ClassLoader,需手動配置ClassLoader。

//工具轉換類

public Object toBean(Class<?> clazz,String xml){
    Object xmlObject=null;
    XStream xStream=new XStream(new DomDriver(“UTF-8”, new XmlFriendlyNameCoder("-", "")));
    //應用傳過來類的註解
    xStream.processAnnotations(clazz);
    //自動檢測註解
    xStream.autodetectAnnotations(true);
    //手動設置ClassLoader
    xStream.setClassLoader(clazz.getClassLoader());
    xmlObject=xStream.fromXML(xml);
    return xmlObject;
}

 

 

參考:https://www.codercto.com/a/45593.html

https://blog.csdn.net/ads4512389/article/details/101265996

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章