簡體   English   中英

如何在Java中從Couchbase獲取json文檔?

[英]How can I get json documents from couchbase in java?

我有一個在多個應用程序之間共享的couchbase數據庫,將文檔存儲為json。 我似乎無法將數據輸入我的Java應用程序,因為它似乎依賴於本機Java二進制序列化。

這段代碼:

CouchbaseClient client = new CouchbaseClient(hosts,"bucket","");
System.out.println((String)client.get("someKey"));

結果是

net.spy.memcached.transcoders.SerializingTranscoder:  Failed to decompress data
java.util.zip.ZipException: Not in GZIP format

因為它默認會嘗試反序列化。 我注意到我可以提供自己的轉碼器,但實際上我只想要原始字符串數據,因此我可以使用gson或其他內容對自己進行json解析。 可用的轉碼器似乎都沒有給我這個。

沙發文檔有一個設置json的示例,但沒有一個用於讀取json的示例。 人們如何將json讀入Java?

首先,這個問題很快就會消失,因為Couchbase“ 2.0 SDK”在彼此之間實現了通用標志,因此不會出現這種問題。 如果您想看看這里發生了什么,可以閱讀Michael的博客 首先,出現問題的原因是在1.x系列中,Couchbase試圖與現有應用程序代碼和內存緩存保持兼容。 在內存緩存的世界中,客戶端都是由不同的人在不同的時間編寫的。

根據例外情況,我認為您可能正在嘗試讀取.NET存儲的項目。 我有一個示例轉碼器,您可以在幾周前使用它。

確保您使用的是最新的CB Java客戶端:

<dependencies>
  <dependency>
    <groupId>com.couchbase.client</groupId>
    <artifactId>couchbase-client</artifactId>
    <version>1.4.4</version>
  </dependency>
</dependencies>

請參閱: Couchbase Java客戶端庫1.4

我有使用CB客戶端運行的服務。 這是我創建客戶端的方法:

CouchbaseConnectionFactoryBuilder cfb = new CouchbaseConnectionFactoryBuilder();
cfb.setOpTimeout(10000);
cfb.setOpQueueMaxBlockTime(5000);
CouchbaseClient client = new CouchbaseClient(cfb.buildCouchbaseConnection(baseURIs, bucketName, ""));

這是一個示例,我如何獲取原始字符串並將其轉換為POJO:

MyPOJO get(CouchbaseClient client, String key)
{
  com.google.gson.Gson gson = new com.google.gson.Gson();
  String jsonValue = (String) client.get(key);
  return gson.fromJson(jsonValue, MyPOJO.class);
}

另外,請使用導致此問題的示例JSON文檔更新您的問題。 也許與文檔本身的格式有關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM