2013-06-12 10 views
5

Ich versuche, etwas xml mit Jackson zu erstellen, und ich kann nicht die Liste angezeigt werden, wie ich brauche. Ich erhalte:Jackson List Hilfe - Java

<Messages> 
    <Messages>...</Messages> 
    <Messages>...</Messages> 
</Messages> 

ich es aussehen soll:

<Messages> 
    <Message>...</Message> 
    <Message>...</Message> 
</Messages> 

Mein Code sieht wie folgt aus:

public List<Message> messages; 

Was ich nennen diese Variable, die denselben Namen alle ist die Kindelemente bekommen. Ich bin mir sicher, dass dies anderswo beantwortet wurde, aber ich kann nichts finden, was sich um mein Problem kümmern würde. Danke für die Hilfe.

+1

Können Sie Ihre 'Message' Klasse posten? –

Antwort

11

ich den einfachen Weg gefunden, dies zu tun, ohne weitere Abhängigkeiten hinzufügen. Sie verwenden einfach die Anmerkungen:

@JacksonXmlElementWrapper(localName = "Messages") 
@JacksonXmlProperty(localName = "Message") 

Diese Frage ist, was mich in die richtige Richtung wies. Jackson XML globally set element name for container types. Sie können auch über diese Anmerkung auf der GitHub Seite here

+0

Glückwunsch, dass Sie eine elegantere Lösung finden. – lreeder

+0

Gott segne dich und deine Seele – cen

4

Try JAXB Anmerkungen wie folgt aus:

@XmlElementWrapper(name = "Messages") 
    // XmlElement sets the name of the entities 
    @XmlElement(name = "Message") 
    public List<Message> messages; 

Siehe http://wiki.fasterxml.com/JacksonJAXBAnnotations für die Verwendung von JAXB Annotationen mit Jackson.

Es gibt eine gute JAXB Tutorial hier:

http://www.vogella.com/articles/JAXB/article.html

und hier:

https://jaxb.java.net/tutorial/index.html

+0

Das hat nicht funktioniert. Ich habe immer noch genau was ich vorher bekommen habe. – jhamm

+0

@jhamm Wenn Sie dies nicht getan haben, müssen Sie auch das jackson-xc jar als Abhängigkeit hinzufügen. Sie müssen dem ObjectMapper außerdem mitteilen, JAXB-Anmerkungen zu verwenden. Siehe Abschnitt "Registrieren von JAXB Annotation Introspector" in http://wiki.fasterxml.com/JacksonJAXBAnnotations – lreeder

1

lesen Sie auch unter Verwendung versuchen könnte:

@JacksonXmlRootElement(localName = "Messages") 
class Messages{ 
    @JacksonXmlProperty(localName = "Message") 
    List<String> message = new ArrayList<>(); 

    public List<String> getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message.add(message); 
    } 
} 
0

Als weitere Option können Sie es ohne Anmerkungen durch Ändern der XML tun können. Sie würden die XML ändern

<messages> 
    <Message> 
    <value>"foo"</value> 
    </Message> 
    <Message> 
    <value>"bar"</value> 
    </Message> 
</messages> 

und ändern Sie die Java zu

class Foobar { 
    List<Message> messages; 
} 
class Message { 
    String value; 
} 

Dann würde Nachrichten zwei Objekte der Nachrichtenklasse enthalten, ein, wo der Wert Mitglied „foo“ und die andere ist gleich, wo Der Wert member entspricht "bar".