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
相关产品推荐
相关产品推荐

