16

次の 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;
}

ここで注意すべき重要な点が 2 つあります。

  1. コース オブジェクトはタグでラップされていません
  2. 一部のプロパティは属性です

FasterXML でこの xml を逆シリアル化するには、オブジェクトにどのように注釈を付ける必要がありますか?

4

1 に答える 1

22

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]]]
于 2014-05-13T20:12:14.347 に答える