我构建了一个REST服务,我发现使用Gson从ObjectId生成的JSON字符串的格式将不同于spring-boot生成的格式。并且如果我以GSON格式将现有Document的_id字段的ObjectId发送到我的REST服务并使用mongorepository的save函数将其保存到集合中,即使在_id上设置了唯一索引,仍将插入具有重复_id的新Document领域。但是,如果我以Spring-boot产生的格式发送ObjectId,则一切运行正常。我想知道是什么引起了这样的问题?
"timestamp": 1558461711,
"machineIdentifier": 5077764,
"processIdentifier": 21816,
"counter": 13546695,
"date": "2019-05-21T18:01:51.000+0000",
"time": 1558461711000,
"timeSecond": 1558461711(generated by spring-boot)
"counter": 13546695,
"randomValue1": 9256029,
"randomValue2": 856,
"timestamp": 1558461711(by GSON)
答案 0 :(得分:0)
如果您正在使用mongodb,最好使用org.bson.Document(由mongodb依赖项提供)或其他一些mongodb类将文档转换为json,而不是GSON。
Document document = new Document();
document.put("_id", new ObjectId());
String json = document.toJson()
document.toJson()
应该以正确的方式对ObjectId进行字符串化。
实际上,上面代码的输出将是:
{ "_id" : { "$oid" : "5ce51fb47dda11a8507087eb" } }
哪种是mongodb的有效格式,不确定SpringBoot将如何对此做出反应。
无论如何,希望对您有所帮助。