转换回 Java 对象时 MongoDB“NumberLong/$numberLong”问题

Gee*_*eek 5 java json mongodb bson mongodb-query

我有一个 json,有点像 {"Header" : {"name" : "TestData", "contactNumber" : 8019071740}}

如果我将其插入 mongoDB,它将类似于

{"_id" : ObjectId("58b7e55097989619e4ddb0bb"),"Header" : {"name" : "TestData","contactNumber" : NumberLong(8019071743)}

当我读回这些数据并尝试使用 Gson 转换为 java 对象时,它会抛出异常 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a long but was BEGIN_OBJECT at line 1 column 109 path $.Header.contactNumber

我找到了这个,但我想知道我是否有非常复杂的 json 结构,那么我可能需要在这种方法中操作许多 json 节点。

有没有人对此有更好的选择。

编辑:1 我正在阅读查询和转换 json 如下

Document MongoDocument = mycollection.find(searchCondition);
String resultJson =  MongoDocument.toJson();
Gson gson = new Gson();
Model model= gson.fromJson(resultJson, ItemList.class);
Run Code Online (Sandbox Code Playgroud)

小智 7

我们可以使用下面的代码:

Document doc = documentCursor.next();
JsonWriterSettings relaxed = JsonWriterSettings.builder().outputMode(JsonMode.RELAXED).build();
CustomeObject obj = gson.fromJson(doc.toJson(relaxed), CustomeObject.class);
Run Code Online (Sandbox Code Playgroud)


joe*_*rno 2

看一下:将 MongoDB 3 中的 Document 对象转换为 POJOS

我有同样的问题。com.mongodb.util.JSON.serialize(document) 的解决方法可以解决问题。

  • com.mongodb.util.JSON.serialize(document) 在新版本中已弃用 (2认同)