Как переименовать элементы списка XStream? - PullRequest
4 голосов
/ 29 июля 2011

У меня есть модель, которая выглядит следующим образом:

@XStreamAlias("article")
class Article {
  List<String> tags;
  List<String> categories;
}

XStream сериализуется в XML, который выглядит следующим образом:

<article>
  <tags>
    <string>foo</string>
  </tags>
  <categories>
    <string>bar</string>
  </categories>
</article>

У меня вопрос, как я могу сделать так, чтобы <string>foo</string>становится <tag>foo<tag> и <string>bar</string> становится <category>bar</category>?Я не могу изменить структуру своей модели, поскольку использую ODM Morphia для создания экземпляров Article (статья должна содержать List<String>).

Ответы [ 3 ]

5 голосов
/ 30 июля 2011

Этот пост может быть вам полезен.

В двух словах версия:

ClassAliasingMapper mapper = new ClassAliasingMapper(stream.getMapper());
mapper.addClassAlias("tag", String.class);
mapper.addClassAlias("category", String.class);
stream.registerLocalConverter(Article.class, "tags", new CollectionConverter(mapper));
stream.registerLocalConverter(Article.class, "categories", new CollectionConverter(mapper));
1 голос
/ 02 января 2014

В XStream версии 1.4.5 вам нужно определить разные объекты mapper для разных псевдонимов классов.Решение будет следующим:

    ClassAliasingMapper mapper = new ClassAliasingMapper(xstream.getMapper());  

    //tag
    mapper.addClassAlias("tag", String.class);
    xstream.registerLocalConverter(
        Article.class,
        "tags",
        new CollectionConverter(mapper)
    );


    mapper = new ClassAliasingMapper(xstream.getMapper()); 
          // this is required otherwise it will override the previos mapper
    mapper.addClassAlias("category", String.class);
    xstream.registerLocalConverter(
        Article.class,
        "categories",
        new CollectionConverter(mapper)
    );
0 голосов
/ 29 июля 2011

В моем уме:

@XStreamImplicit(itemFieldName="tag")
private List<String> categoryList;

Это работает?

...