Konvertieren von BSON-Typ ObjectId JSON (Speicherung in Mongodb) -Java
new Gson().toJson(new ObjectId())
Wenn ich die oben, die Ausgabe die ich bekomme, ist
"_id" : { "_uhrzeit" : 1374347520 , "_machine" : -1025067326 , "_inc" : 585905201 , "_new" : false}
Aber Eigentlich möchte ich es so
"_id":{"$oid":51eae100c2e6b6c222ec3431}
das ist die übliche mongodb-ID-format. Was ist die bevorzugte Methode in Java für diese?
Update:
Mein Wert Objekt
import com.google.gson.annotations.SerializedName;
import org.bson.types.ObjectId;
public class TaskObject {
@SerializedName("_id")
private ObjectId _id;
@SerializedName("revNo")
private int revNo;
}
Ich versuche zu speichern, um mongodb mit einem benutzerdefinierten _id
TaskObject taskObject = new TaskObject();
taskObject.set_id(new ObjectId());
TaskMongoDBClient.getInstance().
persistNewTaskData(new Gson().toJson(taskObject));
Was gespeichert wird, in der mongodb sieht wie folgt aus.
_id: { "_uhrzeit" : 1397464341 , "_machine" : 1441187434 , "_inc" : -1687457948 , "_new" : true}
Statt _id:{"$oid": xxxx} kann ich die Abfrage durch die Verwendung eines oid-Wert.
Was mache ich hier falsch? bitte helfen Sie.
Dank
- Ich fügte hinzu, mehr details.
- Sie meinen, Sie wollen hinzufügen neue Eigenschaft $oid in Json
- Es tut mir Leid,jetzt ich kann nicht finden, einen besseren Weg, um zu erklären bei meiner Frage nicht weiter. Wenn jeder von Euch wurde in diesem Zusammenhang, bitte lassen Sie mich wissen, wie war Ihre Herangehensweise oder die was sind mehr-kompatible libraries mit BSON Datentypen.
- api.mongodb.org/java/current/org/bson/types/ObjectId.html
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es mindestens zwei Möglichkeiten, dies zu tun. Wahrscheinlich die richtige Art und Weise ist die Verwendung der GSON TypeAdapter zu konfigurieren, wie die ObjectId ist geschrieben (und gelesen) JSON. Sie brauchen, um etwas zu schaffen, implementiert
TypeAdapter
und registrieren Sie es mit derGsonBuilder
diese Weise GSON weiß, dass es eine Besondere Art und Weise zu behandeln ObjectIds.Ich geschrieben habe, einen kleinen test zu beweisen, dass dies funktioniert, über Ihren Fall und Beispiel-Objekt (aber weggelassen
revNo
Feld für die Kürze):Beachten Sie, dass der test behauptet das JSON sieht so aus, wie Sie es wollen, und ich hatte zum erstellen einer
ObjectIdTypeAdapter
weiß, dass der Feldname ObjectId ist "$oid" und der Wert ist einfach den string-Wert der ObjectID und nicht serialise alle Felder einzeln.Beachten Sie auch, dass, wenn Sie die Weise ändern, die das Objekt geschrieben wird, JSON, müssen Sie auch ändern Sie die Art, wie es gelesen wird. Also habe ich auch umgesetzt
read
zu überprüfen, dass das Feld name ist der richtige (man sollte wohl eine Ausnahme hier, statt mit einem einfachen geltend machen, wenn es nicht stimmt), und Lesen Sie dann den Wert und erstellen die ObjectId aus diesem String-Wert.Im wirklichen Leben, werden Sie wahrscheinlich wollen prüfen auf null-Werte in beiden Fällen zu.
Weil ich bin eine verantwortliche coder, ich schrieb auch ein test, um zu zeigen, das Lesen Fall funktioniert auch:
Weiter Lesen: