Как я могу получить документы JSON с couchbase в 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

так как он пытается десериализоваться по умолчанию. Я заметил, что могу предоставить свой собственный транскодер, но я действительно хочу только необработанные строковые данные, чтобы я мог json анализировать их сам, используя gson или что-то еще. Ни один из доступных транскодеров, кажется, не дает мне этого.

В документации по couchbase есть пример для установки json, но нет для его чтения. Как люди читают JSON в Java?

2 ответа

Во-первых, эта проблема скоро исчезнет, ​​так как "2.0 SDK" Couchbase реализуют общие флаги между собой, поэтому такого рода проблемы не возникают. Блоги Майкла хорошо читаются, если вы хотите увидеть, что здесь происходит. Во-первых, причина проблемы заключается в том, что в серии 1.x Couchbase пытался оставаться совместимым с существующим кодом приложения и memcached. В мире memcached клиенты были написаны разными людьми в разное время.

Исходя из исключения, я полагаю, что вы, вероятно, пытаетесь прочитать элемент, хранящийся в.NET. У меня есть образец транскодера, который вы можете использовать для этого несколько недель назад.

Убедитесь, что вы используете последнюю версию Java-клиента CB:

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

см.: Couchbase Java Client Library 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, который вызывает эту проблему. Возможно, это как-то связано с форматом самого документа.

Другие вопросы по тегам