2011-10-11 52 views
2

我目前正在使用Jersey开发一个使用Jersey的RESTful API来处理旧的,相当复杂的系统。我们希望支持两种形式的输入 - JSON和XML。RESTful API - 序列化vs'解析'

在这一点上,我正在考虑两种实现API的方式 - 第一种方法是创建一系列带注释的POJO,以便将传入请求映射到该POJO。

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

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

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

编辑:多说一点,在我的情况下,有吨的类不能注释在这个阶段(这个应用程序已积极开发超过十年)。如果我打算继续使用POJO路线,那么我将不得不创建一大堆新的“序列化”对象,其目的主要是为了序列化XML/JSON和从XML/JSON序列化。

这些类需要进行管理以保持与实际模型类(其中可能有多个表示相同对象)的日期保持一致,这就是为什么我正在考虑按照“手动”方法。

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

回答

3

第一种方法的好处和第二种方法的缺点在于,第一种方法的工作量很小。使用JAXB批注的POJO绝对是与泽西一起使用的方式,除非您无法使其工作 - 就像您无法将其表示为您希望的XML/JSON一样。但是,一般情况下,您可以免费获得XML和JSON输入和输出。

2

注意:我是EclipseLink JAXB (MOXy)的领导者,也是JAXB 2 (JSR-222)专家组的成员。

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

JAX-RS的实现可以很容易地实现这需要XML和JSON消息的服务:

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

默认情况下,新泽西州使用JAXB实现与抛弃的对象转换到/自JSON:

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

更详细地说明了一下,在我的情况下,有吨的类这 可以”在此阶段注释(此应用程序已积极开发 十多年)。

如果您的类无法修改以添加注释,那么您可以使用MOXy的XML元数据文档。下面是如何这个元数据在Jersey经由JAX-RS ContextResolver杠杆的例子: