まず第一に、あなたの質問は実際には2つの無関係な質問です。私は、両方に答えるために最善を尽くします。
コンバーター
日付変換に関する2番目の質問へ。私の考えでは、これがあなたがここにいる理由のようです。
独自のコンバーターを追加する基本的な方法はかなり単純です。この方法registerConverter
で手がかりが得られるはずです。Iを実装する方法がわからない場合はConverter
、XStreamによってすでに提供されている多くのコンバーターの1つを確認することをお勧めします。余談ですが、コンバーターの優先順位について言及しなければならないような気がします。
コンバーターは、明示的な優先順位で登録できます。デフォルトでは、XStream.PRIORITY_NORMALに登録されています。同じ優先度のコンバーターは、登録されている逆の順序で使用されます。デフォルトのコンバーター、つまり他に登録されているコンバーターが適切でない場合に使用されるコンバーターは、優先度XStream.PRIORITY_VERY_LOWで登録できます。XStreamは、デフォルトでReflectionConverterをフォールバックコンバーターとして使用します。
言い換えると、同じクラスを受け入れる2つのコンバーターが与えられると、最後に追加されたものが使用されます。
ConverterLookup
あなたがあなたをどのように使うことができるかを答えるためにConverterLookup
、同じ結果をもたらすかもしれない2つの方法があります、個人的に私は代替案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
に新しいマッピング用にを実装します。(buildMapper
内部をXStream.java
見て、デフォルトのいくつかを確認してください)次のように初期化します。
ClassLoader classLoader = new ClassLoaderReference(new CompositeClassLoader());
Mapper mapper = new DefaultMapper(classLoader);
mapper = new MyOwnMapperWrapper(mapper);
XStream xs = new XStream(null, mapper, new XppDriver());