参考资料:https://github.com/FasterXML/jackson-dataformat-xml (官网)
https://blog.csdn.net/neweastsun/article/details/100044167
这里这要是讲基础的使用,这里主要讲反序列化,序列化也差不太多
maven依赖
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.10.1</version>
</dependency>
xml规范(顺便简单说下)
1、xml 区分大小写
2、xml在编写的时候最好全部大写或者全部小写
基础代码(反序列化的)
XmlMapper mapper = new XmlMapper();
File file = new File(XML_PATH);
ClusterInfoList clusterInfoList = mapper.readValue(file, ClusterInfoList.class);
注解相关
参考资料:https://github.com/FasterXML/jackson-dataformat-xml/wiki/Jackson-XML-annotations
@JacksonXmlProperty
localName 指定本地名称
@JacksonXmlRootElement
localName 指定root的根路径的名称,默认值为类名
@JsonIgnoreProperties(ignoreUnknown = true)
这个注解写在类上,用来忽略在xml中有的属性但是在类中没有的情况
@JacksonXmlElementWrapper(useWrapping (default:true))
这个详细说下
这个的含义是指定XML元素用于List或者Map ,默认值userWrapping=true,代表使用包装器元素
这句话 比较难懂 我使用一个具体示例来说下
@Data
@JacksonXmlRootElement(localName = "clusterinfos")
public class ClusterInfoList {
@JacksonXmlElementWrapper(useWrapping = false)
@JacksonXmlProperty(localName = "cluster")
public List<ClusterInfo> clusterinfos;
public ClusterInfoList(){}
}
@Data
public class ClusterInfo {
private String name;
}
XmlMapper mapper = new XmlMapper();
File file = new File(XML_PATH);
ClusterInfoList clusterInfoList = mapper.readValue(file, ClusterInfoList.class);
List<ClusterInfo> clusterinfos = clusterInfoList.getClusterinfos();
for (ClusterInfo info : clusterinfos) {
System.out.println(info.getName());
}
读取的xml的文件
<?xml version="1.0" encoding="UTF-8"?>
<clusterinfos>
<cluster>
<name>source</name>
</cluster>
<cluster>
<name>aaa</name>
</cluster>
</clusterinfos>
当使用@JacksonXmlElementWrapper(useWrapping = false) 相当于不使用包装器元素,相当于List内部的实例是不用的,使用list外层为多个实例。
如果使用@JacksonXmlElementWrapper(useWrapping = true)或者默认 的话,对应的xml应该该为
<?xml version="1.0" encoding="UTF-8"?>
<clusterinfos>
<cluster>
<clusterinfo>
<name>source</name>
</clusterinfo>
<clusterinfo>
<name>aaa</name>
</clusterinfo>
</cluster>
</clusterinfos>
网友评论