【问题标题】:How to use Couchbase Java Client in a Dropwizard Project?如何在 Dropwizard 项目中使用 Couchbase Java 客户端?
【发布时间】:2016-07-22 23:53:08
【问题描述】:

我一直在查看couchbase-java-client 项目,想知道是否可以在dropwizard 项目中使用它。

这似乎很自然,因为 couchbase 基本上是一个 JSON 数据库,但 java 客户端似乎与 Jackson 不兼容。据我所知,couchbase 客户端库包含 its own internal implementation of a JSON library,它与所有其他 java JSON 库不兼容,这真的很奇怪。

我发现一开始看起来很有希望的JacksonTransformers 类。但经过仔细检查,该库使用的是 Jackson 的阴影版本(重写了 com.couchbase.client.deps.com.fasterxml.jackson.core 包)。

无论如何,既然 dropwizard 使用 Jackson 和 Jersey 通过 REST API 编组 JSON 文档,那么使用 couchbase-java-client 库的摩擦最小的方式是什么?在这种情况下甚至可能吗?

【问题讨论】:

    标签: java jackson couchbase dropwizard


    【解决方案1】:

    绝对可以将 Couchbase 与 Dropwizard 一起使用。客户端 SDK 提供 JSON 操作对象以方便开发人员,但它也允许将 JSON 处理委托给 Jackson 或 GS​​ON 等库。 看看RawJsonDocumenthere。 基本上,您可以使用字符串化 JSON(来自任何框架)来创建其中一个对象,客户端 SDK 会将其理解为任何操作的 JSON 文档,即:

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

    【讨论】:

      【解决方案2】:

      应该可以做到这一点。

      1. 客户端向 dw 服务器请求资源人。
      2. DW 服务器对 couchebase 的请求,返回代表 Person 的 Pojo 或代表 Person 的 JSON。
      3. 如果是 JSON,在 DW 中创建一个带有 Jackson 注释的 POJO 并将其返回给客户端
      4. 如果是特殊的 couchebase pojo,请将其映射到 Jackson pojo 并返回给客户

      【讨论】:

        【解决方案3】:

        基于@CamiloCrespo答案的解决方案:

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

        请记住,您不能将ObjectMapper mapper = new ObjectMapper() 之类的简单映射器与Dropwizard 一起使用。

        您可以通过Application#run() 方法从Environment#getObjectMapper() 获取它,或者使用Jackson.newObjectMapper() 进行测试。

        使用示例:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-02
          • 2014-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-28
          相关资源
          最近更新 更多