2014-11-26 23 views
7

Witam Potrzebuję stworzyć XML z JAVA używając Jackson-dataformat XMLMapper. XML powinny być jakSerialize Java List do XML przy użyciu mapera Jackson XML

<Customer> 
    <id>1</id> 
    <name>Mighty Pulpo</name> 
    <addresses> 
     <city>austin</city> 
     <state>TX</state> 
    </addresses> 
    <addresses> 
     <city>Hong Kong</city> 
     <state>Hong Kong</state> 
    </addresses> 
</Customer> 

Ale mam go zawsze jak z dodatkową "< adresy> </adresy>" tag.

<Customer> 
    <id>1</id> 
    <name>Mighty Pulpo</name> 
<addresses> 
    <addresses> 
     <city>austin</city> 
     <state>TX</state> 
    </addresses> 
    <addresses> 
     <city>Hong Kong</city> 
     <state>Hong Kong</state> 
    </addresses> 
<addresses> 
</Customer> 

Używam poniżej kodu do tworzenia XML

JaxbAnnotationModule jaxbAnnotationModule = new JaxbAnnotationModule(); 
XmlMapper mapper = new XmlMapper(); 
mapper.enable(SerializationFeature.INDENT_OUTPUT); 
mapper.registerModule(jaxbAnnotationModule); 
mapper.registerModule(new GuavaModule()); 
String xml = mapper.writeValueAsString(customer); 
System.out.println(xml); 

Proszę może ktoś mi pomóc? Jak mogę usunąć dodatkowy tag? Próbowałem użyć @XmlElement, ale to nie pomaga. TIA !!

+0

Masz listę adresów (wiele) w klasie klienta. więc musisz mieć adresy węzłów nadrzędnych, a ich węzeł podrzędny będzie adresem. – ManojP

+0

Thx Manoj, ale nie chcę żadnego węzła rodzicielskiego. Czy możemy jakoś ominąć węzeł rodzicielski? –

+0

Mam odpowiedź - Wystarczy użyć @JacksonXmlElementWrapper (useWrapping = false) Thx dla spędzania czasu, aby ją przeczytać. –

Odpowiedz

19

Wypróbuj poniższy kod

@JacksonXmlRootElement(localName = "customer") 
class Customer { 

    @JacksonXmlProperty(localName = "id") 
    private int id; 
    @JacksonXmlProperty(localName = "name") 
    private String name; 

    @JacksonXmlProperty(localName = "addresses") 
    @JacksonXmlElementWrapper(useWrapping = false) 
    private Address[] address; 

    //getters, setters, toString 
} 

class Address { 

    @JacksonXmlProperty(localName = "city") 
    private String city; 

    @JacksonXmlProperty(localName = "state") 
    private String state; 
    // getter/setter 
} 
+1

Thx Manoj !!! @JacksonXmlElementWrapper (useWrapping = false) pomaga .. –

+0

Twoje powitanie !! Przyjmij odpowiedź, jeśli rozwiąże ona Twój problem. – ManojP

+0

tak! To rozwiązało, Przyjęto twoją odpowiedź :) –

0

Wystarczy dodać do odpowiedzi ManojP, o ile dodanie @JacksonXmlElementWrapper(useWrapping = false) w deklaracji zmiennej nie działa (co miało dla mnie), dodając go do getter metoda zrobi lewy.

1

To ustawienie zmienia domyślne zachowanie zawijania, jeśli nie chcesz zajmować się adnotacjami w całym kodzie.

XmlMapper mapper = new XmlMapper(); 
mapper.setDefaultUseWrapper(false); 
Powiązane problemy