gpt4 book ai didi

java - 如何使用 FasterXML 反序列化带有注释的 XML

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:54:11 29 4
gpt4 key购买 nike

我有以下 XML 架构:

<Courses semester="1">
<Course code="A231" credits="3">Intermediate A</Course>
<Course code="A105" credits="2">Intro to A</Course>
<Course code="B358" credits="4">Advanced B</Course>
</Courses>

我需要将其转换为 POJO 为:

public class Schedule
{
public int semester;
public Course[] courses;
}

public class Course
{
public String code;
public int credits;
public String name;
}

这里有两点需要注意:

  1. 类(class)对象未包含在标签中
  2. 一些属性是属性

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

最佳答案

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

<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.3.3</version>
</dependency>

之后就可以这样使用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]]]

关于java - 如何使用 FasterXML 反序列化带有注释的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23632419/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com