Jersey、JAXB、JAX-RS、Moxy、Jackson、EclipseLink Moxy、json 和 xml 之间有什么关系?

What is the relationship between Jersey, JAXB, JAX-RS, Moxy, Jackson, EclipseLink Moxy, json and xml?

我来自 Node.js 背景并且对 RESTful 网络服务有很好的理解。

现在我正在尝试使用 Java 构建 RESTful 网络服务。我了解核心 Java 但对基于 Java 的 Web 开发完全陌生。

我在一些教程之后得出结论,我需要使用 Jersey 框架来构建我的 RESTful API。我知道 Jersey 是 JAX-RS 的某种参考实现。

但我无法理解其他各种术语和组件之间的关系,例如 JAXB、Jackson、EclipseLink Moxy、jersey-media-moxy、Jettison、JSON-P JSON , XML, 等等 我的阅读材料。我唯一可以得出的结论是,它不像 Java 脚本那样直接将 Java 对象转换为 XML 或 JSON 等价物。

我的问题是,如果我正在开发基于 RESTful API.

的 Java,那么上面提到的这些术语之间的关系是什么以及它们如何组合在一起

Java 世界中肯定有很多术语,这会为新开发人员创建一个重要的学习曲线。并不是说使用 Java 传递 JSON 或 XML 文档特别困难,只是多年来你需要做的各种零碎的术语已经萌芽。我试图在下面列出我对您使用的术语的理解...

XML - 你知道 XML 是什么,对吧?可扩展标记语言。这是我们在 JSON 成为大事之前所拥有的。

JSON - 哦,好吧,JSON 是新的大事件。它是一种人类可读的对象序列化格式,比 XML 更简洁。现在很流行。这是新的灵丹妙药,对你的痛有好处,会解决你所有的问题...

JAXB - Java 生态系统中的 "Java Architecture for XML Binding" 是将 XML 数据转化为您可以与之交互的对象的主要机制,反之亦然。重要的是要意识到它是一个 API 而不是一个实现,因此它主要在 javax.xml.bind 包中定义了一组注释和简单的 类 / 接口。要使用 JAXB 做任何有用的事情,您需要一个实现。 Glassfish 应用程序服务器中包含一个参考实现。大多数应用程序服务器都会有某种 JAXB 实现。

Jackson - 数据绑定库。它支持 XML 和 JSON 作为文档格式,并实现了 JAXB API。您可以使用 Jackson 作为 JAXB 的实现,或者您可以直接使用 Jackson API。

EclipseLink Moxy - JAXB API 的替代实现。和杰克逊一样,它也有自己的API。您可以选择使用或不使用它。您可能不想同时使用 Jackson 和 Moxy。

Jersey-media-moxy - 如您所述,Jersey 是 JAX-RS 的一个实现。 JAX-RS 的一方面是传递文档——通常是 XML 或 JSON。为此,Jersey 需要知道将哪个底层库用于数据绑定或流处理。所以 jersey-media-moxy 作为一种 jersey 插件依赖项存在,您可以使用它来配置 Jersey 以使用 Moxy 来满足您的对象序列化需求。有一个使用 jackson 的等效包,称为 jersey-media-json-jackson.

Jettison - 另一个序列化库,用于将 Java 对象转换为 Json 并返回。

JSON-P - API 用于处理 JSON 作为事件流或通过数据绑定到对象。此 API 仍在开发中。您可能会问为什么有人在没有它的情况下进行 json 处理 - 答案是他们要么利用专有库 APIs(例如 Jackson 或 Moxy),要么他们使用重新利用 JAXB API 与 JSON 一起工作(Jackson 绝对允许这样做,我不确定 Moxy)。 JSON-P 将使直接使用 JSON 功能变得更容易,而无需 JAXB 引入的所有 XML-概念。