2017-11-06 7 views
0

Es gibt eine Objekt-Mapper-Funktion, um Karten nach Kartenschlüsseln zu sortieren, aber über Java-Sätze wird nichts gesagt. Wenn ich Objekte in einem java.util.Set in meinem POJO abspeichere, wird der Jackson ObjectMapper sie in irgendeiner Reihenfolge in das json-Array serialisieren?Jackson ObjectMapper: Wird java.util.Set in aufsteigender sortierter Reihenfolge nach jsons Array serialisiert?

Wenn nicht, denke ich darüber nach, einen benutzerdefinierten Serializer für das Set zu diesem Zweck zu schreiben - gibt es einen besseren Weg, den jemand vorschlagen kann?

Update:

Letztlich ist das Ziel, eine Reihe von einzigartigen ganzen Zahlen in eine Art von Behälter in einem „Anfrage“ pojo deserialisieren. Verarbeiten Sie dann die Anfrage und übergeben Sie dieses Eingabefeld (unverändert) in einem "Antwort" -Objekt an das entsprechende Ausgabefeld.

Ich möchte die Daten in den POJOs als java.util.Set speichern, nur um alle Benutzer glücklich zu machen (wenn Sie versuchen, es als Untertyp von Set zu speichern, dann können die Konsumenten der POJO-Schnittstelle das stören Sie können nicht nur ein Set bekommen, sondern müssen ein HashSet oder ein TreeSet erwarten.

Funktioniert das?

  1. JSON-Array [5,4,3,2,1] wird in Set deserialisiert ABER, verwende ich @JsonDeserialize (as = TreeSet.class) auf die Setter-Methode. Der Laufzeittyp des Objekts ist nun ein TreeSet (obwohl es im POJO als Set gespeichert ist).
  2. Das Set wird über den Server weitergegeben und endet schließlich in der Antwort POJO (Laufzeittyp ist immer noch TreeSet, obwohl der POJO-Feldtyp Set ist).
  3. ObjectMapper serialisiert ein TreeSet zu json array [1,2,3,4,5] (weil TreeSet natürlich sortiert ist).

Punkt 3 oben ist derjenige, über den ich mich wundere - wird ObjectMapper den Laufzeittyp des POJO-Feldes oder den deklarierten Typ verwenden?

+0

Vielleicht kann Ihnen das helfen? https://stackoverflow.com/questions/19272830/order-of-json-objects-using-jacksons-objectmapper – user

+0

Dank @user - dieser Artikel ist über die Reihenfolge der Eigenschaften Serialisierung. Meine Frage betrifft die Serialisierung von Content-Bestellungen. –

Antwort

1

A JSON Array ist eine Sammlung bestellt, genau wie ein Java-Array ist:

Ein Array ist eine geordnete Sammlung von Werten. Ein Array beginnt mit [ (linke Klammer) und endet mit ] (rechte Klammer). Werte werden durch , (Komma) getrennt. Jedoch

ordnete nicht sortiert bedeutet. Es bedeutet nur, dass es die Reihenfolge der angegebenen Werte behält:

  • Wenn die Set sortiert ist (zB TreeSet), dann die JSON-Array sortiert, entsprechend der Sortierreihenfolge des Set:

    TreeSet: Die Elemente sind in der Reihenfolge ihrer natürlichen Reihenfolge oder durch Verwendung einer Comparator bei eingestellten Erstellungszeit vorgesehen ist, je nachdem, welche Konstruktor verwendet wird.

  • Wenn die Set ungeordnete (z.B. HashSet) ist, dann ist der JSON-Array in der beliebigen Bestellung durch die Set zurückgegeben.

    HashSet: Es gibt keine Garantien hinsichtlich der Iterationsreihenfolge des Satzes; insbesondere garantiert es nicht, dass der Auftrag über die Zeit konstant bleibt.

Dies ist im Gegensatz zu den Feldern ein JSON Objekt:

Ein Objekt ein Paar ungeordneten Satz von Namen/Wert. Ein Objekt beginnt mit { (linke Klammer) und endet mit } (rechte Klammer). Auf jeden Namen folgt : (Doppelpunkt) und die Name/Wert-Paare werden durch , (Komma) getrennt.

+0

Danke - jemand anderes schlug vor, ein TreeSet gleichzeitig zu verwenden. Klingt wie ein Plan! –

Verwandte Themen