In JAXB können Sie das @ XmlElementWrapper-Attribut verwenden, um Tags zum Umbrechen einer Sammlung von Elementen anzugeben. Diese Wrapper-Tags werden jedoch auch dann angezeigt, wenn die Auflistung leer ist (sie werden nicht angezeigt, wenn die Auflistung null
ist). Gibt es eine Möglichkeit JAXB die Wrapper-Tags wegzulassen, wenn die Sammlung leer ist? Die Verwendung von Adaptern für die Sammlung scheint nicht zu funktionieren, da JAXB dies so interpretiert, dass es den Adapter auf jedes Element in der Sammlung anwenden sollte.Wrapper-Tags in JAXB auslassen, wenn die Auflistung leer ist
1
A
Antwort
1
Sie können Ihr gewünschtes Verhalten auf eine etwas hackische Weise erzwingen, indem Sie Marshal Event Callbacks verwenden.
@XmlRootElement(name="example")
@XmlAccessorType(XmlAccessType.FIELD)
public class Example {
@XmlElementWrapper(name="wrapper")
@XmlElement(name="item")
private List<Item> items;
// invoked by Marshaller before marshalling
private void beforeMarshal(Marshaller marshaller) {
if (items != null && items.isEmpty())
items = null;
}
// ... getters and setters
}
beschrieben Wie in Marshal Event Callbacks gibt es tatsächlich zwei alternative Möglichkeiten, wie Marschall Rückrufe verwenden:
- Setzen Sie die
beforeMarshal
und/oderafterMarshal
Methode direkt in die Klasse, und das ist es. (Dies ist der einfachere Weg, und deshalb habe ich das in meiner Antwort verwendet). - Erstellen Sie eine Marshaller.Listener und schreiben Sie die
beforeMarshal
undafterMarshal
Methoden dort. Sie müssten diesen Listener dann in IhremMarshaller
registrieren.
1
Sie können Zuhörer Mechanismus der Marshaller
Sie hinzufügen können/set ein Hörer wie unten:
jaxbMarshaller.setListener(new Listener()
{
@Override
public void beforeMarshal(Object source)
{
if (source instanceof MyCollectionWrapper)
{
MyCollectionWrapper wrapper = (MyCollectionWrapper)source;
if (wrapper.getCollection() != null && wrapper.getCollection().isEmpty())
{
wrapper.setCollection(null);
}
}
}
});
wo MyCollectionWrapper
die Klasse Ihre Wrapper-Klasse repräsentiert ist.
Dies sollte das Wrapper-Tag entfernen, wenn die Sammlung leer ist.
Verwandte Themen
- 1. regex string Ersatz: auslassen Komma wenn backref leer
- 2. Beim Hochladen von Dateien in die ASP.Net 5-Web-API ist die Auflistung von IFormFile leer.
- 3. UISearchDisplayTableView anzeigen, wenn die Suchzeichenfolge leer ist
- 4. auswerten, wenn die Liste leer ist JSTL
- 5. Makefile gesetzt, wenn die Variable leer ist
- 6. Nginx. Wenn der URI leer ist. Wenn die Domain leer ist. Ort. Regex
- 7. JAXB xjc: Wie generiert man Code für Strings, der leer zurückkehrt, wenn der Wert null ist?
- 8. Abfrageer ist leer, wenn Tabellenausdruck Abfrage leer ist
- 9. Wenn Linq-Ergebnis leer ist
- 10. $ _FILE ist leer, wenn die Größendatei größer ist, Codeigniter
- 11. javax.xml.bind.PropertyException wenn jaxb Marshalling
- 12. Spalteninformationen in cx_oracle erhalten, wenn die Tabelle leer ist?
- 13. Hintergrundbild, das anzeigt, wenn die Liste leer ist in Flex
- 14. Wie Fußzeile ausblenden, wenn die Listenansicht in Android leer ist?
- 15. Ternär-Operator in Javascript, wenn die Variable leer ist
- 16. wenn leer sogar gelingt, wenn die Variablen nicht leer sind
- 17. React.js: Deaktivieren Sie die Schaltfläche, wenn die Eingabe leer ist
- 18. Unity3d Sqlite, Kann ich die Ausgabe "Die Daten sind leer" anzeigen, wenn die Datentabelle leer ist?
- 19. Wenn die Zelle leer ist Kopieren Sie die Zelle über
- 20. Zeitzone ist leer, wenn in Los Angeles
- 21. auslassen leer Wörterbuch und Eigenschaften Eltern, wenn sie mit Json.Net Serialisierung
- 22. PHP: wenn! Leer & leer
- 23. Setze Standardwert in JAXB
- 24. DjangoRestFramework - Null-Felder auslassen, wenn Objekte
- 25. System.InvalidOperationException: Die Auflistung wurde
- 26. JSON ist leer, während die Datenbank nicht leer ist
- 27. Outlook VBA - Erkennen, wenn der Posteingang leer ist? Makro ausführen, wenn der Posteingang leer ist?
- 28. VBA - Nur Ausführen if-Anweisung, wenn Array nicht leer ist, läuft auch wenn Array leer ist,
- 29. Warum ist die getElementsByTagNameNS in Java leer?
- 30. sumif läuft nicht "nicht", wenn die Zelle leer ist