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

标签 java rest jersey jersey-2.0 jaxb2

<分区>

我有 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 概念。

关于java - Jersey、JAXB、JAX-RS、Moxy、Jackson、EclipseLink Moxy、json 和 xml 之间有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36032978/

相关文章:

java - 概括 REST API 的分页技术

java - 从 Jersey 2.26 中删除 AbstractContainerRequestValueFactory

java - Jersey REST/JAXB 错误,映射接口(interface)

java - 前端和后端分别部署(域)的Cookies的使用

java - 如何捕获算术异常

java - 基于时间的 REST API 基本安全性

rest - 在 REST 架构中,客户端如何使用超媒体?

java - WebSphere 中@PostConstruct 异常处理的行为

java - 将 json 文件转换为 sd 卡中存在的字符串

java - JPA:尝试加载持久性单元时出错