使用具有已定义名称的XStream存储List <String>

Hle*_*leb 8 java xstream

我想将一些类存储到xml:

    XStream xstream = new XStream(new DomDriver());

    List<String> modules = new ArrayList<String>();
    modules.add("mod1");
    modules.add("mod2");
    ModulesConfig modulesConfig = new ModulesConfig(modules);

xstream.processAnnotations(ModulesConfig.class);
log.info(xstream.toXML(modulesConfig));
Run Code Online (Sandbox Code Playgroud)

类ModulesConfig:

@XStreamAlias("modules-config")
public class ModulesConfig {

    @XStreamAlias("moduleName")
    private List<String> moduleNames;

    public ModulesConfig(List<String> moduleNames) {
        this.moduleNames = moduleNames;
    }

    public List<String> getModuleNames() {
        return moduleNames;
    }

    public void setModuleNames(List<String> moduleNames) {
        this.moduleNames = moduleNames;
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

<modules-config>
  <moduleName>
    <string>mod1</string>
    <string>mod2</string>
  </moduleName>
</modules-config>
Run Code Online (Sandbox Code Playgroud)

但我希望元素被命名为"moduleName".如何配置xstream或我必须添加到类的注释?我想要这样的结果:

<modules-config>
  <moduleNames>
    <moduleName>mod1</moduleName>
    <moduleName>mod2</moduleName>
  </moduleNames>
</modules-config>
Run Code Online (Sandbox Code Playgroud)

mre*_*isz 4

这不会得到您要求的确切结果,但看起来更干净:

@XStreamImplicit(itemFieldName="moduleName")
private List<String> moduleNames;
Run Code Online (Sandbox Code Playgroud)

产生的结果将是:

<modules-config>
  <moduleName>mod1</moduleName>
  <moduleName>mod2</moduleName>
</modules-config>
Run Code Online (Sandbox Code Playgroud)