MongoDb Java Драйвер для Json () и $ oid - PullRequest
0 голосов
/ 17 апреля 2020

Я создаю Java Jersey API, который использует MongoDb и драйвер MongoDb.

Ресурсы должны выводить JSON сохраненного документа MongoDb для использования в проекте внешнего интерфейса с использованием Svelte.

Из-за стандартной реализации org.bson.Document.toJson() вывод моих документов выглядит примерно так:

[{ "_id" : { "$oid" : "5e97f08f2175aa9174dbec0e" }, "hour" : 8, "minute" : 15, "enabled" : true, "duration" : 120 }

Я бы хотел, чтобы это было:

[{ "_id" : "5e97f08f2175aa9174dbec0e", "hour" : 8, "minute" : 15, "enabled" : true, "duration" : 120 }

Таким образом, это легче обрабатывать идентификатор в интерфейсе. Итак, как избавиться от объекта $ oid?

Мне уже удалось получить формат как * wi sh, используя:

JsonWriterSettings settings = JsonWriterSettings.builder()
                .outputMode(JsonMode.RELAXED)
                .objectIdConverter((value, writer) -> writer.writeString(value.toHexString()))
                .build();
        System.out.println(doc.toJson(settings));

Но как зарегистрировать этот объект настройки глобально так что каждый doc.toJson() вызов будет использовать его?

И что произойдет, если я отправлю измененные или новые документы из интерфейса в API и сделаю:

Document document = Document.parse(doc);

Является ли мой модифицированный _id поле автоматически преобразуется снова в ObjectId? Или мне нужен org.bson.codecs.Decoder или CodecRegistry? Как это будет сделано?

1 Ответ

0 голосов
/ 21 апреля 2020

$ oid относится к типу поля ObjectId в bson spe c. Насколько я знаю, вам нужно манипулировать документом, чтобы заменить ObjectId для вашего _id на String.

String oidAsString = document.getObjectId("_id").toString();
document.put("_id", oidAsString);
...