Jersey,JAXB,JAX-RS,Moxy,Jackson,EclipseLink Moxy,json和xml之间有什么关系?[已关闭]

2022-09-02 05:37:57

我来自Node.js背景,对RESTful Web服务有很好的了解。

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

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

但是我无法理解其他各种术语和组件之间的关系,如JAXB,Jackson,EclipseLink Moxy,jersey-media-moxy,Jettison,JSON-P JSON,XML等,这些都出现在我的阅读中。我唯一能得出的结论是,它不像JavaScript那样直接地将Java对象隐藏为XML或JSON等效物。

我的问题是,上面提到的这些术语之间的关系是什么,以及如果我正在开发一个基于Java的RESTful API,它们如何组合在一起。


答案 1

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

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

JSON - 哦,好吧,JSON是新的大事。它是一种人类可读的对象序列化格式,比 XML 更不详细。现在很受欢迎。这是新的灵丹妙药,对你有什么问题都有好处,可以解决你所有的问题......

JAXB - Java 生态系统中的“用于 XML 绑定的 Java 体系结构”是将 XML 数据转换为对象的主要机制,然后可以与之交互,反之亦然。重要的是要意识到它是一个API而不是一个实现,所以它主要在包中定义一组注释和简单的类/接口。要使用 JAXB 执行任何有用的操作,您需要一个实现。Glassfish应用程序服务器中包含一个参考实现。大多数应用程序服务器将具有某种 JAXB 实现。javax.xml.bind

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-media-moxy 作为一种 Jersey 插件依赖项而存在,您可以使用它来配置 Jersey 以使用 Moxy 来满足您的对象序列化需求。有一个使用jackson的等效包,称为jeric-media-json-jackson。

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

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


答案 2