Я создаю API Java Jersey, который использует драйвер MongoDb и MongoDb.
Ресурсы должны выводить сохраненный документ MongoDb в формате JSON для использования во внешнем проекте с использованием 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?
Мне уже удалось получить желаемый формат, используя:
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? Как это сделать?