使用Java Cloudant API存储映射

时间:2016-02-24 07:50:54

标签: java hashmap cloudant

我正在使用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键。

(即)当hashmap中的键值为null时,相应的键不会存储在Cloudant中。

对此有任何想法。?我哪里错了。?

Cloudant如何在内部存储Java对象。

它是否在内部将Java对象转换为String?

1 个答案:

答案 0 :(得分:1)

首先,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();

然而,据说这可能会导致错误和意外行为,因为序列化空值尚未经过测试