You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XStream隐式配置疑问:XML转Java对象的注解配置方法

解决XStream映射XML到LocalMSZ类的注解问题

针对你给出的XML结构和Java类定义,我来帮你配置正确的XStream注解,让两者完美映射:

首先先明确你的XML结构:

str1 str2

你的LocalMSZ类需要三个关键注解,具体代码如下:

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import java.util.List;

@XStreamAlias("localMSZ") // 把类映射到XML根节点<localMSZ>
public class LocalMSZ {

    @XStreamAlias("territories") // 把属性映射到XML的<territories>节点
    @XStreamImplicit(itemFieldName = "codeOKTMO") // 声明List的每个元素对应<territories>下的<codeOKTMO>子节点
    private List<String> territories;

    // 记得添加getter和setter方法
    public List<String> getTerritories() {
        return territories;
    }

    public void setTerritories(List<String> territories) {
        this.territories = territories;
    }
}

接下来,在使用XStream解析或序列化的时候,一定要开启注解支持,否则注解不会生效:

import com.thoughtworks.xstream.XStream;

public class Main {
    public static void main(String[] args) {
        String xml = "<localMSZ> <territories> <codeOKTMO>str1</codeOKTMO> <codeOKTMO>str2</codeOKTMO> </territories> </localMSZ>";
        
        XStream xstream = new XStream();
        xstream.processAnnotations(LocalMSZ.class); // 启用注解处理
        
        // 解析XML到Java对象
        LocalMSZ localMSZ = (LocalMSZ) xstream.fromXML(xml);
        System.out.println(localMSZ.getTerritories()); // 输出 [str1, str2]
        
        // 也可以把Java对象序列化为XML
        LocalMSZ newMSZ = new LocalMSZ();
        newMSZ.setTerritories(List.of("str3", "str4"));
        String generatedXml = xstream.toXML(newMSZ);
        System.out.println(generatedXml);
    }
}

注解作用说明

  • @XStreamAlias("localMSZ"):将LocalMSZ类与XML的根节点<localMSZ>绑定,告诉XStream这个类对应哪个XML元素。
  • @XStreamAlias("territories"):把类中的territories属性映射到XML里的<territories>节点,确保属性名和XML节点名对应。
  • @XStreamImplicit(itemFieldName = "codeOKTMO"):这个注解是核心——它告诉XStream,territories这个List中的每个String元素,对应<territories>节点下的<codeOKTMO>子节点,自动把所有<codeOKTMO>的文本值收集到List中。

最后别忘了确认你的项目中已经引入了XStream的依赖,比如Maven项目可以在pom.xml中添加:

<dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.4.20</version> <!-- 可以用最新稳定版本 -->
</dependency>

内容的提问来源于stack exchange,提问作者Kadzhaev Marat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:26:56