2016-04-18 18 views
0

Ich verwende Vertex und Jackson in meiner Entwicklung. In einer meiner Klassen, bekam ich ein Feld vom Typ JsonObject, etwa so:Serialize Vertx JsonObject mit Jackson

class User 
    private String name; 
    private JsonObject details; 

Dieses Details Feld andere JsonObjects oder JsonArrays enthalten kann, zB: {"details": [{"street": "Broadway"}, {"building": 20}]}
Ich habe keinen dedizierten Klasse dieser Struktur, soweit es keine feste Struktur gibt und sie kann variieren.
Details Objekt wird in der Art und Weise, wie diese erstellt werden:

JsonObject details = new JsonObject().put("name", "value").put("another", "another") 

Diese aproach ermöglichen es mir Details von jeder Struktur in meinem Code zu speichern. Soweit ich diese Daten in meinem Backend nicht manipulieren muss, möchte ich keine spezielle Struktur dafür erstellen.
Alles funktioniert gut, bis ich versuche, diese JsonObject mit Jackson zu serialisieren. Leider gibt mir Jackson statt der schönen JSON-Zeichenfolge map Objekt, das mit allen zusätzlichen Feldern der Karte serialisiert ist.

Wie kann ich serialisiert JsonObject von VertX mit Jackson?

+0

Sie können den Jackson's JsonNode anstelle von JsonObject verwenden. –

+0

Leider brauche ich 'JsonObject'. Es hängt viel Code davon ab. – WhiteAngel

Antwort

0

Schließlich stellte sich heraus, dass vertex bereits eine eigene Implementierung von Serializer hat. Es genügt, nur ihre Klasse zu verwenden, um Serialisierung durchzuführen (die Jackson Undercover verwenden wird).

JsonObject user = new JsonObject(Json.encode(new User()); 

Und es funktioniert gut.

+0

Das sieht sehr ineffizient aus: Dies serialisiert das Benutzerobjekt zu JSON, deserialisiert dann (wenn der JsonObject-Konstruktor aufgerufen wird) und serialisiert es (sobald Sie das JsonObject serialisieren, um es über die Verbindung zu senden). –

+0

Um von 'User' zu' JsonObject' ohne die dazwischenliegende Zeichenkette zu wechseln, verwenden Sie [JsonObject.mapFrom] (http://vertx.io/docs/apidocs/io/vertx/core/json/JsonObject.html#mapFrom-java .lang.Objekt-) –

1

Mit Blick auf JsonObject's javadoc sah ich eine getMap() Methode. Ich weiß, dass Jackson in der Lage ist, Maps mit Leichtigkeit zu serialisieren.

Verwandte Themen