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