假设我有一个像这样的简单 Java 类:
public class User {
String firstName;
String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
现在,假设我想解析以下 XML:
<user>
<firstName>Homer</firstName>
<lastName>Simpson</lastName>
</user>
我可以在 XStream 中毫无问题地执行此操作,如下所示:
User homer = (User) xstream.fromXML(xml);
好吧,到目前为止一切都很好,但这是我的问题。
假设我想要解析以下 XML:
<user>
<fullName>Homer Simpson</fullName>
</user>
我怎样才能把这个 XML 转换成same使用 XStream 的用户对象?
我想要一种实现某种回调的方法,以便当 XStream 解析 fullName 字段时,我可以将字符串分成两部分,并手动设置用户对象上的名字和姓氏字段。这可能吗?
请注意,我不是问如何将字符串分成两部分(这是简单的部分),我想知道如何拦截 XML 解析,以便 XStream 不会尝试反射性地设置 User 对象上的 fullName 字段(这显然是不存在)。
我查看了 XStream 提供的转换器,但不知道如何将其用于此目的。
任何帮助,将不胜感激。
您需要一个自定义转换器:
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
public class UserConverter implements Converter
{
@Override
public boolean canConvert(Class clazz) {
return clazz.equals(User.class);
}
@Override
public void marshal(Object value, HierarchicalStreamWriter writer,
MarshallingContext context)
{
}
@Override
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext context)
{
User user = new User();
reader.moveDown();
if ("fullName".equals(reader.getNodeName()))
{
String[] name = reader.getValue().split("\\s");
user.setFirstName(name[0]);
user.setLastName(name[1]);
}
reader.moveUp();
return user;
}
}
参考:http://x-stream.github.io/converter-tutorial.html http://x-stream.github.io/converter-tutorial.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)