2014-11-04 8 views
6

Patrzyłem na projekt couchbase-java-client i zastanawiałem się, czy można go użyć wewnątrz projektu dropwizard.Jak korzystać z klienta Java Couchbase w projekcie Dropwizard?

Wygląda na to, że byłoby to naturalne dopasowanie, ponieważ baza na kanapie jest w zasadzie bazą danych JSON, ale klient Java nie wydaje się być zgodny z Jackson. O ile mogę powiedzieć, biblioteka klienta couchbase zawiera its own internal implementation of a JSON library, która jest niekompatybilna z wszystkimi innymi bibliotekami JSON java, co jest naprawdę dziwne.

Znalazłem klasę JacksonTransformers, która na początku wyglądała obiecująco. Ale po bliższej inspekcji biblioteka używa zacieniowanej wersji Jacksona (z przeprogramowanym pakietem com.couchbase.client.deps.com.fasterxml.jackson.core).

W każdym razie, ponieważ Dropwizard używa Jackson i Jersey do porządkowania dokumentów JSON za pośrednictwem REST API, jaki jest najgorszy sposób wykorzystania biblioteki couchbase-java-client? Czy to w ogóle możliwe w tym przypadku?

Odpowiedz

3

Jest to z pewnością możliwe używanie Couchbase z Dropwizard. Pakiet SDK klienta udostępnia obiekty manipulacyjne JSON dla wygody programisty, ale pozwala również na delegowanie przetwarzania JSON do biblioteki takiej jak Jackson lub GSON. Spójrz na klasę RawJsonDocumenthere. Zasadniczo można użyć Stringified JSON (wychodzi z ramami), aby utworzyć jedną z tych obiektów i SDK klient zrozumie go jako dokument JSON dla każdej operacji np

String content = "{\"hello\": \"couchbase\", \"active\": true}"; 
bucket.upsert(RawJsonDocument.create("rawJsonDoc", content)); 
0

Ta funkcja powinna być możliwa.

  1. Żądania klienta do serwera dw dla osoby zasobów.
  2. Żądania serwera DW na zasadzie couquebase, otrzymuje kopię Pojo reprezentującą osobę lub osobę reprezentującą JSON.
  3. Jeśli to JSON utwórz POJO z Jacksonem adnotacji w DW i powrócić że do klienta
  4. Jeśli jest to specjalny couchebase pojo, map, które do POJO Jackson i powrócić do do klienta
0

rozwiązanie oparte na @CamiloCrespo odpowiedzieć:

public static Document<String> toDocument(String id, Object value, 
     ObjectMapper mapper) throws JsonProcessingException { 
    return RawJsonDocument.create(id, mapper.writeValueAsString(value)); 
} 

Należy pamiętać, że nie można użyć po prostu maper, jak ObjectMapper mapper = new ObjectMapper() z Dropwizard.

Można go pobrać z Environment#getObjectMapper() w metodzie Application#run() lub użyć testu Jackson.newObjectMapper().

Przykład zastosowania:

ObjectMapper mapper = Jackson.newObjectMapper(); 
User user = User.createByLoginAndName("login", "name"); 
bucket.insert(toDocument("123", user, mapper)); 
Powiązane problemy