【问题标题】:Scala JSON serialization support in Jersey 2.5Jersey 2.5 中的 Scala JSON 序列化支持
【发布时间】:2014-01-20 13:32:52
【问题描述】:

我创建了 Jersey 2.5 Scala REST API 项目。

我有一个 ResourceConfig 文件,我们将其命名为 MyApplication,看起来类似于:

class MyApplication extends ResourceConfig {
    packages(classOf[MyResource].getPackage().getName())
}

它所做的只是注册资源:MyResource。如何配置 Jersey (2.5) 以提供开箱即用的 JSON 序列化/反序列化。

例如,MyResource 可能如下所示:

@Path("/")
class MyResource {

    @POST
    @Produces(Array("application/json"))
    @Consumes(Array("application/json"))
    def getIt(request:SomeRequestModel) = {
        /* Do something with the request, return some response model */
        return new SomeResponseModel
    }

}

所以重申一下,我如何配置 Jersey 以分别自动反序列化和序列化请求和响应模型?

【问题讨论】:

    标签: json scala rest serialization jersey


    【解决方案1】:

    提供序列化的实际上并不是 Jersey,它只是利用 JAX-RS 的实现来执行该角色。

    假设 Jersey 是一个严格的要求,这里最简单的解决方案是使用带有 Scala 绑定的 jackson。你可以在这里找到一个例子:https://bitbucket.org/jordipradel/jersey-scala-example

    如果您不完全依赖于泽西岛......我是否建议您尝试使用 Spray 或 spray2-mini 来获得更惯用的 Scala 解决方案?

    【讨论】:

    • 我是来自 .NET 的新 JVM 世界。有没有关于如何“覆盖”默认序列化策略的文档?
    【解决方案2】:

    我在开发 Java REST 服务时很少使用 Jersey。但是,我会说您似乎混淆了两个概念 - 注册 JAX-RS 提供程序和配置提供程序以序列化/反序列化 JSON。

    要注册提供程序,您可以使用 ResourceConfig,就像您所做的那样。

    至于第二期配置Jersey“知道”如何序列化/反序列化JSON:

    "如第 4.3 节所述,“自动发现功能”JSON 处理媒体模块是您无需在客户端/服务器中显式注册其功能 (JsonProcessingFeature) 的模块之一 可配置为当您将 jersey-media-json-processing 模块添加到您的类路径时,会自动发现并注册此功能。"

    要将该模块的 Jackson 风格添加到类路径中,您只需手动将其放在那里或使用 Maven 执行此操作:

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.5</version>
    </dependency> 
    

    我选择 Jackson 是因为在我看来它是 Java 领域中最好的 JSON 序列化器/反序列化器。

    说了这么多之后,我曾经尝试用我喜欢的 Java REST 框架 RESTEasy 在 Scala 中编写服务。这比我的第一次约会更尴尬。 Scala 和 RESTEasy 只是因为习惯用法不匹配、类型问题等等不适合。

    如果您想在 Scala 中编写 REST 服务,请考虑使用该语言构建的框架,例如 ScalatraUnfilteredSpray

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-23
      • 2014-07-18
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      相关资源
      最近更新 更多