JAXB für Listen, die auf natürliche Weise für JSON oder XML zurückgegeben werden

8

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.

    
Scott 02.01.2014, 19:54
quelle

1 Antwort

4

Sie können Folgendes tun, um die gewünschten XML- und JSON-Repräsentationen zu erhalten:

Schritt # 1 - Nutzen @XMLElementWrapper

Anstelle von:

%Vor%

Sie können mit @XmlElementWrapper Folgendes tun (siehe: Ссылка ):

%Vor%

Schritt # 2 - Nutzen Sie MOXys Wrapper als Array Name Eigenschaft

Durch Angabe des Wrappers als Array-Name-Eigenschaft verwendet MOXy den Wert von @XmlElementWrapper als JSON-Array-Name.

%Vor%

Weitere Informationen

Blaise Doughan 02.01.2014, 22:22
quelle

Tags und Links