【问题标题】:Storing Map with Java Cloudant API使用 Java Cloudant API 存储地图
【发布时间】:2016-02-25 19:31:04
【问题描述】:

我正在使用 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 对象转换为字符串?

【问题讨论】:

  • 你也可以创建自己的对象 NullObject 来避免使用 Null

标签: java hashmap cloudant


【解决方案1】:

首先,Cloudant 不存储 Java 对象,它是一个 JSON 文档存储。它使用 GSON 将 Java 对象序列化为 JSON 文档,因此它发送到 cloudant 的数据具有以下形式:

{
  "_id": "aDocId",
  "field1": "value1"
 }

查看code for the library,它在创建GSON builder时不包括serializeNulls()方法。您可以通过在调用build 方法创建客户端之前向ClientBuilder 提供您自己的GsonBuilder 实例来解决此问题。

例子:

CloudantClient client = ClientBuilder.account("example")
                           .username("example")
                           .password("password")
                           .gsonBuilder(new GsonBuilder.serializeNulls())
                           .build();

不过,话虽如此,它可能会导致错误和意外行为,因为序列化空值尚未经过测试

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 2017-04-09
    • 2021-09-13
    相关资源
    最近更新 更多