Umwandlung von Dokument-Objekten in MongoDB 3 POJOS
Spare ich ein Objekt mit java.util.Feld "Datum" in eine MongoDB 3.2 Instanz.
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(myObject);
collection.insertOne(Document.parse(json));
die Zeichenfolge enthält:
"captured": 1454549266735
dann lese ich es aus dem MongoDB-Instanz:
final Document document = collection.find(eq("key", value)).first();
final String json = document.toJson();
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
xx = mapper.readValue(json, MyClass.class);
die Deserialisierung schlägt fehl:
java.lang.RuntimeException: com.fasterxml.jackson.databind-Methode.JsonMappingException:
Kann nicht deserialisiert Instanz von java.util.Datum aus START_OBJECT token
Sehe ich, dass die json-string erstellt von "Dokument.toJson()" enthält:
"captured": {
"$numberLong": "1454550216318"
}
statt, was war es ursprünglich ("eingefangen": 1454549266735)
MongoDB docs sagen, Sie begann mit "MongoDB Erweitert Json". Ich habe versucht, sowohl Jackson 1 und 2 analysieren - kein Glück.
was ist der einfachste Weg zu konvertieren diese Dokument-Objekte zur Verfügung gestellt von MongoDB 3 Java POJOs? vielleicht kann ich überspringen toJson () - Schritt insgesamt?
Versuchte ich mongojack -, die man nicht unterstützen MongoDB3.
Sah paar anderen POJO-Mapper aufgeführt, die auf MongoDB docs Seite - Sie alle benötigen um Ihre individuelle Anmerkungen zu Java-Klassen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie festlegen und verwenden eigener JsonWriterSettings Feinabstimmung JSON-generation:
Produzieren:
Wenn Sie nicht verwenden Sie benutzerdefinierte Einstellungen dann-Dokument erzeugen wird, verlängert json:
Dieser sieht aus wie Mongo-Java-Treiber-bug, bei dem Dokument.toJson profuces nicht-standard-JSON-auch wenn JsonMode.STRENGE verwendet. Dieses problem wird im folgenden beschrieben Fehler https://jira.mongodb.org/browse/JAVA-2173, für die ich Sie ermutigen, zu Stimmen.
Eine Problemumgehung ist die Verwendung von com.mongodb.util.JSON.serialize(document).
Es sieht aus wie Sie mit Datums-Objekt in "myObject". In diesem Fall sollten Sie eine
DateSerializer
implementiertJsonSerializer<LocalDate>, JsonDeserializer<LocalDate>
und registrieren Sie es mitGsonBuilder
. Beispielcode folgt:Jetzt registrieren mit GsonBuilder:
Spare ich einen tag mit meiner mongo-Dokument, die angibt, die dem ursprünglichen Typ des Objekts gespeichert. Ich habe dann mit Gson zu analysieren, es mit dem Namen des Typs. Zuerst erstellen Sie die gespeicherte Dokument
dann zu Lesen das Dokument wieder in das Java -,
Dank an Alexey für den Hinweis auf JSON.serialize().