2014-05-13 23 views
9

Mam następujący schemat XML:Jak deserializować XML z adnotacjami korzystających FasterXML

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

Trzeba przekonwertować to do POJO jak:

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

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

Istnieją dwie ważne rzeczy do odnotowania tutaj:

  1. kursów obiektowo nie są owinięte w tagu
  2. Niektóre właściwości to atrybuty:

Jak muszę dodawać adnotacje do moich obiektów, aby uzyskać FasterXML do deserializacji tego pliku XML?

+0

ciąg -> ciąg –

Odpowiedz

12

Trzeba dodać jackson-dataformat-xml zależność do projektu:

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

Po tym można użyć adnotacji XML w ten sposób:

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

Teraz trzeba użyć XmlMapper zamiast ObjectMapper:

JacksonXmlModule module = new JacksonXmlModule(); 
module.setDefaultUseWrapper(false); 
XmlMapper xmlMapper = new XmlMapper(module); 

System.out.println(xmlMapper.readValue(xml, Schedule.class)); 

Powyższy wydruk skryptu:

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]]] 
Powiązane problemy