Как я могу получить документы 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, который вызывает эту проблему. Возможно, это как-то связано с форматом самого документа.