第一个坑:
XStream解析xml的时候报错AbstractReflectionConverter$UnknownFieldException
.
问题描述:
由于是第一次使用XStream,在使用XStream进行xml转换成Java实体类的时候,xml大部分的值都已经存进类中了,但是项目还是出现问题,经过调试,发现原来是转换的时候,xml有些值没有存进去,导致后面的逻辑不能正常运行。
xml的部分内容:
<Head>
<Receiver>
<UnitIdentifier>450101</UnitIdentifier>
<UnitIdentifier>450201</UnitIdentifier>
</Receiver>
</Head>
对应Receiver类的内容是:
@Data
public class Receiver {
public List<String> UnitIdentifier;
public Receiver()
{
this.UnitIdentifier = new ArrayList<>();
}
}
经过分析后,发现xml文件中的 Receiver 标签是多个 UnitIdentifier 子标签构成的,所以实体类用 List< String> 来接收是正确的,但是要做标识,让 XStream 识别出这个属性的处理方式是转换成 List< String> 的,找到了问题所在,现在就是解决它了。
解决方法:
解决的方法就是使用 @XStreamImplicit
这个注解,这个注解的作用就是
@XStreamImplicit(itemFieldName = “CONDITION”) 指定被注解的List和Map被映射成多个CONDITION标签
最后Receiver类的内容就是:
@Data
public class Receiver {
@XStreamImplicit(itemFieldName = "UnitIdentifier")
public List<String> UnitIdentifier;
public Receiver()
{
this.UnitIdentifier = new ArrayList<>();
}
}
第二个问题(其实不是坑,只是看着难受😮):
问题描述:
在项目中使用XStream的时候,每次启动项目的控制台都会打印出下面红色的内容。
其实是XStream的一种安全机制。
解决方法:
加上下面的代码即可
xStream.allowTypesByRegExp(new String[] { ".*" });
先记录这么多,等往后遇到更多使用XStream的问题在继续写…😁😁😁