我正在构建使用MongoDb和MongoDb驱动程序的Java Jersey API。
资源应该输出存储的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 }
这样,更容易在前端处理id。那么如何摆脱$ 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?怎么做?
$ oid表示bson spec中的ObjectId字段类型。据我所知,您需要操纵文档以将_id的ObjectId替换为String。
String oidAsString = document.getObjectId("_id").toString();
document.put("_id", oidAsString);