使用背景:
在和第三方系统集成的时候,数据传输的格式都是XML,第三方获取到数据之后,转化成XML发送过来,我方系统根据XML转化成对象,如果第三方系统的数据类型增加一个字段,再传输过来时,一般会抛出
“no such field”类似于这样的错误。
问题分析
我们在使用XStream对象时,一般都会直接new一个对象出来,例如
XStream xstream = new XStream();
这样使用之后,xml中的所有属性都需要被待转化的模型识别,假如有一个字段没有对应上,即会抛出错误。
问题解决方案
XStream 官方也提供这样一种构造方法。
XStream xstream = new XStream() {
@Override
protected MapperWrapper wrapMapper(MapperWrapper next) {
return new MapperWrapper(next) {
@Override
public boolean shouldSerializeMember(Class definedIn, String fieldName) {
if (definedIn == Object.class) {
return false;
}
return super.shouldSerializeMember(definedIn, fieldName);
}
};
}
};
xstream.processAnnotations(XXX.class);
这样就算对方扩几个字段这边也不会有一点问题。
具体请参考:http://stackoverflow.com/questions/5377380/how-to-make-xstream-skip-unmapped-tags-when-parsing-xml