gpt4 book ai didi

java - 将 MongoDB 3 中的 Document 对象转换为 POJOS

转载 作者:IT老高 更新时间:2023-10-28 13:11:50 27 4
gpt4 key购买 nike

我正在将带有 java.util.Date 字段的对象保存到 MongoDB 3.2 实例中。

ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(myObject);
collection.insertOne(Document.parse(json));

字符串包含:

"captured": 1454549266735

然后我从 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);

反序列化失败:

java.lang.RuntimeException: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.Date out of START_OBJECT token

我看到“document.toJson()”创建的json字符串包含:

"captured": {
"$numberLong": "1454550216318"
}

而不是原来的(“捕获”:1454549266735)MongoDB 文档说他们开始使用“MongoDB Extended Json”。我尝试了 Jackson 1 和 2 来解析它 - 没有运气。

将 MongoDB 3 提供的 Document 对象转换为 Java POJO 的最简单方法是什么?也许我可以完全跳过 toJson() 步骤?

我试过 mongojack - 那个不支持 MongoDB3。

查看了 MongoDB 文档页面上列出的其他几个 POJO 映射器 - 它们都需要将自定义注释放入 Java 类。

最佳答案

您应该定义并使用自定义 JsonWriterSettings 来微调 JSON 生成:

 JsonWriterSettings settings = JsonWriterSettings.builder()
.int64Converter((value, writer) -> writer.writeNumber(value.toString()))
.build();

String json = new Document("a", 12).append("b", 14L).toJson(settings);

将产生:

 { "a" : 12, "b" : 14 }

如果您不使用自定义设置,则文档将生成扩展 json:

 { "a" : 12, "b" : { "$numberLong" : "14" } }

关于java - 将 MongoDB 3 中的 Document 对象转换为 POJOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35209839/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com