RESTful API - 序列化与'解析'

时间:2011-10-11 04:47:05

标签: xml json rest jersey

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

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

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

就个人而言,第二种方式对我来说似乎更灵活,特别是因为系统中的某些对象非常复杂。

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

编辑:为了进一步详细说明,在我的案例中,有很多类在此阶段无法注释(此应用程序已经积极开发了十多年)。如果我要沿着POJO路线前进,我将不得不创建一大堆新的“序列化”对象,其目的只是为了与XML / JSON进行序列化。

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

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

2 个答案:

答案 0 :(得分:3)

第一个方面的好处和第二个方面的缺点都是你用第一种方法做的工作很少。使用JAXB注释的POJO绝对是使用Jersey的方式,除非你无法使它工作 - 就像你不能让它代表你想要它的XML / JSON一样。但是,一般情况下,您可以免费获得XML和JSON输入和输出。

答案 1 :(得分: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中利用此元数据的示例: