Samstag, Juni 6, 2020

Wie Deserialisieren von XML-Annotationen mit FasterXML

Ich habe die folgende XML-schema:

<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>

Ich brauche, um zu konvertieren, das in POJO als:

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

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

Gibt es zwei wichtige Dinge zu beachten, hier:

  1. Die Kurse Objekt sind nicht verpackt in einem tag
  2. Einige der Eigenschaften sind Attribute

Wie muss ich zum kommentieren meine Objekte zu erhalten, FasterXML deserialisiert mit diesem xml?

  • string -> String
InformationsquelleAutor sbenderli | 2014-05-13

1 Kommentar

  1. 13

    Müssen Sie jackson-dataformat-xml Abhängigkeit zu Ihrem Projekt:

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

    Danach können Sie XML-Annotationen, die in dieser Weise:

    @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
    }

    Nun, Sie haben zu verwenden XmlMapper statt ObjectMapper:

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

    Oben-Skript druckt:

    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]]]

Kostenlose Online-Tests