我将一个带有java.util.Date字段的对象保存到MongoDB 3.2实例中.
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(myObject);
collection.insertOne(Document.parse(json));
Run Code Online (Sandbox Code Playgroud)
字符串包含:
"captured": 1454549266735
Run Code Online (Sandbox Code Playgroud)
然后我从MongoDB实例中读取它:
final Document document = collection.find(eq("key", value)).first();
final String json = document.toJson();
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
xx = mapper.readValue(json, MyClass.class);
Run Code Online (Sandbox Code Playgroud)
反序列化失败:
java.lang.RuntimeException:com.fasterxml.jackson.databind.JsonMappingException:无法从START_OBJECT标记中反序列化java.util.Date的实例
我看到"document.toJson()"创建的json字符串包含:
"captured": {
"$numberLong": "1454550216318"
}
Run Code Online (Sandbox Code Playgroud)
而不是最初的("捕获":1454549266735)MongoDB文档说他们开始使用"MongoDB Extended Json".我试过杰克逊1和2解析它 - 没有运气.
将MongoDB 3提供的Document对象转换为Java POJO的最简单方法是什么?也许我可以完全跳过Json()步骤?
我试过mongojack - 那个不支持MongoDB3.
看看MongoDB文档页面上列出的其他几个POJO映射器 - 它们都需要将自定义注释放到Java类中.