Ich verwende MOXy mit Jersey, um eine RESTful-API zu implementieren und möchte natürlich Listen für JSON und XML zurückgeben, wobei ich meine, dass die XML ein Element-Tag für die gesamte Sammlung sowie die Sammlungselemente enthält JSON enthält nur ein Tag für die Sammlung.
Ich möchte zum Beispiel eine "Organisations" -Ressource mit verschachtelten Listen von Einrichtungen und Standorten zurückgeben. Als XML:
%Vor%Und als JSON:
%Vor% Leider scheint es mir nicht möglich zu sein, eine Codebasis zu erhalten, die es mir ermöglicht, die Ausgabe sowohl für XML als auch für JSON zurückzugeben. Wenn ich eine geschachtelte Liste mit einer Klasse umschließe, dann erscheint das XML korrekt, aber nicht das JSON (siehe "ExternalFacilities" weiter unten). Wenn ich die verschachtelte Liste als eine ArrayList
Unterklasse definiere, erscheint der JSON korrekt, aber nicht der XML (siehe "ExternalLocations" weiter unten).
Das XML-Beispiel zeigt "Einrichtungen" korrekt, aber nicht "Standorte"
Sehen Sie, dass es kein XML-Element gibt, das die "locations" -Liste umschließt (wie es für "facilities" der Fall ist) und dass jeder Ort einen pluralen Elementnamen hat.
%Vor%JSON-Beispiel zeigt "Standorte" korrekt, aber nicht "Einrichtungen"
Sehen Sie, dass die "facilities" -Liste ein JSON-Objekt ist, das ein JSON-Array enthält, während ich nur das JSON-Array (mit dem pluralen Elementnamen) möchte.
%Vor%Diese obigen Beispiele werden mit dem gleichen Code erstellt. Sie müssen lediglich den HTTP-Header Accept so ändern, dass Jersey JSON anstelle von XML zurückgibt. Hier ist ein Auszug der Klassen:
Externe Organisation.java
%Vor%ExternalFacilities.java
%Vor%ExternalLocations.java
%Vor%ExternalFacility.java
%Vor%ExternalLocation.java
%Vor%Scheint zunächst ähnlich zu diese Frage , aber ich versuche nicht, die Objekttypen in meinen Listen zu mischen.
Sie können Folgendes tun, um die gewünschten XML- und JSON-Repräsentationen zu erhalten:
@XMLElementWrapper
Anstelle von:
%Vor% Sie können mit @XmlElementWrapper
Folgendes tun (siehe: Ссылка ):
Durch Angabe des Wrappers als Array-Name-Eigenschaft verwendet MOXy den Wert von @XmlElementWrapper
als JSON-Array-Name.
Weitere Informationen