我有 Node.js 背景,对 RESTful Web 服务有很好的理解。
现在我正在尝试使用 Java 构建 RESTful Web 服务。我了解核心 Java,但对基于 Java 的 Web 开发完全陌生。
我在学习了一些教程后得出结论,我需要使用 Jersey 框架来构建我的 RESTful API。我知道 Jersey 是 JAX-RS 的某种引用实现。
但我无法理解遇到的各种其他术语和组件之间的关系,例如 JAXB、Jackson、EclipseLink Moxy、jersey-media-moxy、Jettison、JSON-P JSON、XML 等我的读数。我唯一可以得出的结论是,它不像 JavaScript 那样直接将 Java 对象转换为 XML 或 JSON 等价物。
我的问题是,如果我正在开发基于 Java 的 RESTful API,那么上述这些术语之间的关系是什么以及它们如何结合在一起。
在 Java 世界中肯定有很多术语,这会为新开发人员创建一个重要的学习曲线。并不是说使用 Java 传递 JSON 或 XML 文档特别困难,只是多年来您需要做的各种零碎的术语已经萌芽。我已尝试在下面列出我对您使用的术语的理解...
XML - 你知道 XML 是什么,对吗?可扩展标记语言。这是我们在 JSON 成为大事之前所拥有的。
JSON - 哦,好吧,JSON 是新的重要事物。它是一种人类可读的对象序列化格式,比 XML 更简洁。现在很流行。这是新的 Elixir ,对你的痛有好处,会解决你所有的问题......
JAXB - Java 生态系统中的“用于 XML 绑定(bind)的 Java 架构”是将 XML 数据转换为您可以与之交互的对象的主要机制,反之亦然。重要的是要认识到它是一个 API 而不是一个实现,因此它主要在 javax.xml.bind
包中定义了一组注释和简单的类/接口(interface)。要使用 JAXB 做任何有用的事情,您需要一个实现。 Glassfish 应用程序服务器中包含一个引用实现。大多数应用程序服务器都会有某种 JAXB 实现。
Jackson - 数据绑定(bind)库。它支持 XML 和 JSON 作为文档格式,并实现了 JAXB API。您可以使用 Jackson 作为 JAXB 的实现,也可以直接使用 Jackson API。
EclipseLink Moxy - JAXB API 的替代实现。和 Jackson 一样,它也有自己的 API。您可以选择使用或不使用它。您可能不想同时使用 Jackson 和 Moxy。
Jersey-media-moxy - 如您所述,Jersey 是 JAX-RS 的一种实现。 JAX-RS 的一方面是传递文档——通常是 XML 或 JSON。为此,Jersey 需要知道将哪个底层库用于数据绑定(bind)或流处理。所以 jersey-media-moxy 作为一种 jersey 插件依赖项存在,您可以使用它来配置 Jersey 以使用 Moxy 来满足您的对象序列化需求。有一个用于使用 jackson 的等效包,称为 jersey-media-json-jackson。
Jettison - 另一个序列化库,用于将 Java 对象转换为 Json 并返回。
JSON-P - 用于将 JSON 作为事件流或通过数据绑定(bind)到对象来处理的 API。此 API 仍在开发中。您可能会问为什么有人在没有它的情况下进行 json 处理 - 答案是他们要么使用专有库 API(例如 Jackson 或 Moxy),要么使用将 JAXB API 重新用于 JSON 的库(Jackson 绝对允许这样做,我不确定 Moxy)。 JSON-P 将使直接使用 JSON 功能变得更容易,而无需 JAXB 引入的所有 XML 概念。