java - 使用 Java Cloudant API 存储 map

标签 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 对象转换为字符串?

最佳答案

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

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

关于java - 使用 Java Cloudant API 存储 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35596214/

相关文章:

java - 如何在Java中声明和使用静态枚举

java - TreeMap<>操作的时间复杂度: get() and subMap()

java - 如何创建自定义哈希表迭代器?

java - Accumulo BatchWriter close() 永远卡住了

java - 什么是 Resteasy 3.X PreProcessInterceptor 的正确替代品?

database - 用于处理标记标签的 NoSQL 结构

geospatial - Cloudant 地理空间查询

java - Maven Eclipse 和依赖项

Java - 为我指明正确的方向

java - HashMap 内 HashMap 的平均值