使用背景 在和第三方系统集成的时候,数据传输的格式都是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);这样就算对方扩几个字段这边也不会有一点问题。