使用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

猜你喜欢

转载自blog.csdn.net/HD243608836/article/details/106672687
今日推荐