Java 目录:https://blog.youkuaiyun.com/dkbnull/article/details/87932486
使用XStream解析XML,转化为Java Bean对象时,如果XML中出现未在Java Bean中定义的属性,会报错,报错信息如下:
Exception in thread "main" com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such field cn.wbnull.test.main.Customer.phone
---- Debugging information ----
message : No such field cn.wbnull.test.main.Customer.phone
field : phone
class : cn.wbnull.test.main.Customer
required-type : cn.wbnull.test.main.Customer
converter-type : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
path : /xml/phone
line number : 3
version : 1.4.11.1
-------------------------------
转化方法做如下处理即可:
public static <T> T xmlToJavaBean(String xml, Class[] types) {
if (StringUtils.isEmpty(xml)) {
return null;
}
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.setupDefaultSecurity(xStream);
xStream.allowTypes(types);
xStream.processAnnotations(types);
return (T) xStream.fromXML(xml);
}

本文介绍使用XStream将XML转换为JavaBean时遇到未知字段的异常情况,并提供解决方案,通过自定义XStream实例和MapperWrapper来忽略XML中未在JavaBean定义的属性。
1320





