如何使用FasterXML使用注释反序列化XML

我有以下XML架构:

 Intermediate A Intro to A Advanced B  

我需要将其转换为POJO:

 public class Schedule { public int semester; public Course[] courses; } public class Course { public String code; public int credits; public String name; } 

这里有两件重要的事情需要注意:

  1. 课程对象不包含在标签中
  2. 一些属性是属性

我如何需要注释我的对象才能让FasterXML反序列化这个xml?

您必须将jackson-dataformat-xml依赖项添加到您的项目中:

  com.fasterxml.jackson.dataformat jackson-dataformat-xml 2.3.3  

之后,您可以通过以下方式使用XML注释:

 @JacksonXmlRootElement(localName = "Courses") class Schedule { @JacksonXmlProperty(isAttribute = true) private int semester; @JacksonXmlProperty(localName = "Course") private Course[] courses; // getters, setters, toString, etc } class Course { @JacksonXmlProperty(isAttribute = true) private String code; @JacksonXmlProperty(isAttribute = true) private int credits; @JacksonXmlText(value = true) private String name; // getters, setters, toString, etc } 

现在,您必须使用XmlMapper而不是ObjectMapper

 JacksonXmlModule module = new JacksonXmlModule(); module.setDefaultUseWrapper(false); XmlMapper xmlMapper = new XmlMapper(module); System.out.println(xmlMapper.readValue(xml, Schedule.class)); 

上面的脚本打印:

 Schedule [semester=1, courses=[[code=A231, credits=3, name=Intermediate A], [code=A105, credits=2, name=Intro to A], [code=B358, credits=4, name=Advanced B]]]