使用 Java Cloudant API 存储地图
Storing Map with Java Cloudant API
我正在使用 Java Cloudant API 在 IBM Cloudant 中存储数据。
我正在尝试将 null
键的值存储在文档中的 HashMap 中。
以下是在数据库中插入 HashMap 的代码。
Map<String, Object> map = new HashMap<String, Object>();
map.put("field1", "value1");
map.put("field2", null);
db.save(map);
文档存储成功,但文档中根本不包含field2键。
(即)当 hashmap 中的某个键的值为 null 时,相应的键不会存储在 Cloudant 中。
对此有什么想法吗?我哪里错了。?
Cloudant 如何在内部存储 Java 对象。?
它是否在内部将 Java 对象转换为字符串?
首先,Cloudant 不存储 Java 对象,它是 JSON 文档存储。它使用 GSON 将 Java 对象序列化为 JSON 文档,因此它发送到 cloudant 的数据具有以下形式:
{
"_id": "aDocId",
"field1": "value1"
}
查看 code for the library,它在创建 GSON 构建器时不包含 serializeNulls()
方法。您可以通过在调用 build
方法创建客户端之前向 ClientBuilder
提供您自己的 GsonBuilder
实例来解决此问题。
示例:
CloudantClient client = ClientBuilder.account("example")
.username("example")
.password("password")
.gsonBuilder(new GsonBuilder.serializeNulls())
.build();
然而,这可能会导致 错误 和意外行为,因为序列化 null 尚未经过测试。
我正在使用 Java Cloudant API 在 IBM Cloudant 中存储数据。
我正在尝试将 null
键的值存储在文档中的 HashMap 中。
以下是在数据库中插入 HashMap 的代码。
Map<String, Object> map = new HashMap<String, Object>();
map.put("field1", "value1");
map.put("field2", null);
db.save(map);
文档存储成功,但文档中根本不包含field2键。
(即)当 hashmap 中的某个键的值为 null 时,相应的键不会存储在 Cloudant 中。
对此有什么想法吗?我哪里错了。?
Cloudant 如何在内部存储 Java 对象。?
它是否在内部将 Java 对象转换为字符串?
首先,Cloudant 不存储 Java 对象,它是 JSON 文档存储。它使用 GSON 将 Java 对象序列化为 JSON 文档,因此它发送到 cloudant 的数据具有以下形式:
{
"_id": "aDocId",
"field1": "value1"
}
查看 code for the library,它在创建 GSON 构建器时不包含 serializeNulls()
方法。您可以通过在调用 build
方法创建客户端之前向 ClientBuilder
提供您自己的 GsonBuilder
实例来解决此问题。
示例:
CloudantClient client = ClientBuilder.account("example")
.username("example")
.password("password")
.gsonBuilder(new GsonBuilder.serializeNulls())
.build();
然而,这可能会导致 错误 和意外行为,因为序列化 null 尚未经过测试。