Wie man Jersey/Jackson serialisieren leere Liste; einzelne element der Liste als ein array
Mit Jersey und Jackson zu erstellen, die eine REST-Schnittstelle, wie bekomme ich die Felder serialisiert werden als eine Liste, wenn es 0 oder 1 Elemente in Ihnen. Zum Beispiel:
@XmlRootElement(name="foo")
public class Foo {
@XmlElement
public List<Bar> getBars() {
return this.bars;
}
}
@Path("foo")
public FooResource {
@GET
public Foo getFoo() {
return theFoo;
}
}
Wenn Balken hat keine Elemente, die Resultat serialisiert als null
und wenn es enthält ein einzelnes element, es serialisiert als das element, nicht ein array mit einem einzigen element. Gibt es einen Weg, um diese immer zu serialisieren, die als ein array?
Als Referenz, ich bin mit Jersey 1.10 und Jackson 1.9.2.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir ziemlich sicher, dass Sie nicht wirklich mit Jackson ("POJO" Variante von JSON-Serialisierung), da Jackson würde nicht konvertieren single-element-arrays oder Listen, um nichts anderes. So sind Sie wahrscheinlich mit einem legacy-output-Methoden (wie jettison); was bedeutet, dass wenn Sie das system konfigurieren zu verwenden POJO-mapping-es sollte einfach funktionieren.
JacksonJsonProvider
), mit standard JAX-RS-Registrierung-Mechanismus, siehe wiki.fasterxml.com/JacksonFAQ#JAX-RS (zum Beispiel) für details.Schrieb ich einen blog-post vor Ewigkeiten zum erzwingen von Jersey zu serialisieren single-element-arrays richtig, nicht sicher, ob es veraltet jetzt (seine aus Mitte 2010!), aber es könnte von nutzen sein.
Hinweis: der blog-Kommentar von Brill Pappin auf dem blog zeigen einen unterschiedlichen Ansatz, was bedeutet, dass die Aktualisierung der Jettison-Bibliothek, die Sie verwenden.
Kurz gesagt, Sie können schreiben Sie einen benutzerdefinierten JaxbContextResolver, dass sieht ein wenig aus wie:
Für Klarheit, mein payload-Klasse sah ein wenig wie
Bezug stoppen Jackson serialisiert bean-Eigenschaften als null ist, siehe meine Vorherige Antwort hier, über die Verwendung von Beschriftungen zu ändern, das Verhalten.
Ich es geschafft, zu lösen JSON-array "bug" in den letzten Jersey-json-Bibliothek (v1.14 Sep 2012). Geheime Zutat ist JSONConfiguration und ContextResolver Magie. Siehe meinen folgenden post es hat ein full-code-Beispiel angepasst ContextResolver und der rest der Application-Klasse könnte etwas fuzzy-Logik im ersten Blick.
Das serialisieren von Java-primitiven mit Jersey REST
Primitive und null-oder einelementige Liste array richtig zu JSON serialisiert Dokument.
Ja, wir haben auch vor dem gleichen Problem. Jackson kann nicht serialisieren Liste mit 0 oder einzelnes element zu json-array. Deshalb haben wir versucht, die Verwendung von Json ist ObjectMapper zu konvertieren POJO-Objekt zu einem String. Es wird die Serialisierung von java-Liste, um json-array, unabhängig von der Anzahl der Elemente in Liste (0 oder 1 oder > 0). Der code würde wie folgt Aussehen :
wo die Anfrage ist vom Typ Object. Dies hat keine Auswirkungen auf die Reaktion. Sie können einen Versuch geben.