首先你的问题其实是两个不相关的问题,我会尽力回答。
转换器
关于日期转换的第二个问题。在我看来,这似乎就是你在这里的原因。
添加自己的转换器的基本方法相当简单,方法registerConverter 应该会给你一个线索。如果您想知道如何实现Converter,我建议您查看 XStream 已经提供的众多转换器之一。另外,我觉得我必须提到转换器的优先级。
可以使用明确的优先级注册转换器。经过
默认它们使用 XStream.PRIORITY_NORMAL 注册。转换器
相同优先级的将按相反的顺序使用
挂号的。默认转换器,即将成为的转换器
如果没有其他已注册的转换器适用,则可以使用,可以注册
优先 XStream.PRIORITY_VERY_LOW。 XStream 默认使用
ReflectionConverter 作为后备转换器。
换句话说,给定两个接受相同类的转换器,将使用最后添加的那个。
ConverterLookup
要回答如何使用ConverterLookup,有两种方法可能会产生相同的结果,我个人会选择替代方法 2。
1) 覆盖getConverterLookup
XStream xs = new XStream(){
@Override
public ConverterLookup getConverterLookup() {
return new ConverterLookup() {
public Converter lookupConverterForType(Class type) {
//Do your magic here
}
};
}
};
2) 使用Mapper
在这种情况下,我会保留DefaultMapper,而是为我的新映射实现MapperWrapper。 (查看XStream.java 内部的buildMapper 以查看一些默认值)像这样初始化:
ClassLoader classLoader = new ClassLoaderReference(new CompositeClassLoader());
Mapper mapper = new DefaultMapper(classLoader);
mapper = new MyOwnMapperWrapper(mapper);
XStream xs = new XStream(null, mapper, new XppDriver());