【问题标题】:RESTful API - Serialization vs 'parsing'RESTful API - 序列化与“解析”
【发布时间】:2011-12-05 00:12:10
【问题描述】:

我目前正在使用 Jersey 为一个旧的、相当复杂的系统开发一个 Java 中的 RESTful API。我们希望支持两种形式的输入 - JSON 和 XML。

此时我正在考虑两种实现 API 的方法 - 第一种是创建一系列带注释的 POJO,传入的请求可以映射到这些 POJO。

第二种是将任何 XML 请求转换为 JSON 并手动解析 JSON。

就个人而言,在这一点上,第二种方式对我来说似乎更灵活,尤其是因为系统中的一些对象非常复杂。

基本上我想知道我应该考虑第一个选项是否有任何好处(或第二个选项的缺点)?

编辑:更详细地说,在我的例子中,有大量的类在这个阶段无法注释(这个应用程序已经积极开发了十多年)。如果我要走 POJO 路线,我将不得不创建一大堆新的“序列化”对象,其目的基本上只是在 XML/JSON 之间进行序列化。

需要管理这些类以与实际模型类(其中可能有多个代表同一个对象)保持同步,这就是我考虑采用“手动”方法的原因。

如果这是一个新项目,我肯定会考虑使用注解,但鉴于目前的情况,我不确定这是否是最佳选择。

【问题讨论】:

    标签: xml json rest jersey


    【解决方案1】:

    第一种方法的好处和第二种方法的缺点是,使用第一种方法几乎不需要做任何工作。带有 JAXB 注释的 POJO 绝对是使用 Jersey 的方式,除非您无法使其工作——例如,如果您无法让它表示您想要的 XML/JSON。不过,一般来说,您几乎可以免费获得 XML 和 JSON 输入和输出。

    【讨论】:

      【解决方案2】:

      注意:我是EclipseLink JAXB (MOXy) 的负责人,也是JAXB 2 (JSR-222) 专家组的成员。

      我目前正在使用 Jersey 为 Java 开发一个 RESTful API 旧的,相当复杂的系统。我们希望支持两种形式的 输入 - JSON 和 XML。

      JAX-RS 实现可以轻松实现同时接受 XML 和 JSON 消息的服务:

      @PUT
      @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
      public void put(Customer) {
          ...
      }
      

      默认情况下,Jersey 使用带有 Jettison 的 JAXB 实现来将对象转换为 JSON:

      MOXy 支持使用 JAXB 运行时和注释的原生 XML 和 JSON 绑定。这意味着您可以使用相同的元数据将对象映射到 XML 和 JSON:

      更详细地说,在我的例子中,有很多类 在这个阶段不能注释(这个应用程序已经积极 开发了十多年)。

      如果您有无法修改的类以添加注释,那么您可以使用 MOXy 的 XML 元数据文档。以下是如何通过 JAX-RS ContextResolver 在 Jersey 中利用此元数据的示例:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-18
        • 2011-11-20
        • 1970-01-01
        • 2013-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多