RESTful API - 序列化与“解析”

发布于 2024-12-08 22:01:09 字数 533 浏览 1 评论 0原文

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

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

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

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

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

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

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

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

I'm currently developing a RESTful API in Java using Jersey for an old, quite complex system. We are looking to support two forms of input - JSON and XML.

At this point I'm considering two ways of implementing the API - the first is to create a series of annotated POJOs to which the incoming request can be mapped to.

The second would be to convert any XML requests to JSON and parse the JSON manually.

Personally, the second way seems more flexible to me at this point, especially since some of the objects in the system are very complicated.

Basically I'm wondering if there are any benefits towards the first options (or drawbacks from the second) that I should consider?

EDIT: To elaborate a bit more, in my case, there are tons of classes which can't be annotated at this stage (this application has been actively developed for over ten years). If I'm going to go down the POJO route, I'm going to have to create a whole bunch of new 'serialization' objects whose purpose is to basically just to serialize to and from XML/JSON.

These classes will need to be managed to be kept up to do date with the actual model classes (of which there may be multiple representing the same object) which is why I'm thinking of going down the 'manual' method.

Were this a new project, I would definitely consider the use of annotations, but given the current situation, I'm unsure as to whether it is the best option.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

白衬杉格子梦 2024-12-15 22:01:09

第一种方法的优点和第二种方法的缺点都是,使用第一种方法只需要做很少的工作。带有 JAXB 注释的 POJO 绝对是使用 Jersey 的最佳选择,除非您无法让它工作——就像您无法让它代表您想要的 XML/JSON。不过,一般来说,您几乎免费获得 XML 和 JSON 输入和输出。

Both the benefit of the first and the drawback of the second is that there's very little work for you to do with the first method. POJOs with JAXB annotations are definitely the way to go with Jersey unless you just can't make it work--like if you just can't get it to represent the XML/JSON that you want it to. In general, though, you get XML and JSON input and output virtually for free.

回忆那么伤 2024-12-15 22:01:09

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

我目前正在 Java 中使用 Jersey 开发 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 中利用此元数据的示例:

Note: I'm the EclipseLink JAXB (MOXy) lead and a member of the JAXB 2 (JSR-222) expert group.

I'm currently developing a RESTful API in Java using Jersey for an
old, quite complex system. We are looking to support two forms of
input - JSON and XML.

JAX-RS implementations make it easy to implement a service that takes both XML and JSON messages:

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

By default Jersey uses a JAXB implementation with Jettison to convert objects to/from JSON:

MOXy supports native XML and JSON bindings using the JAXB runtime and annotations. This means you can map an object to XML and JSON using the same metadata:

To elaborate a bit more, in my case, there are tons of classes which
can't be annotated at this stage (this application has been actively
developed for over ten years).

If you have classes that cannot be modified to add annotations, then you can use MOXy's XML metadata document. Below is an example of how this metadata is leveraged in Jersey via a JAX-RS ContextResolver:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文