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

Har*_*til 17 java rest jersey jaxb2 jersey-2.0

我来自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等各种其他术语和组件之间的关系.我唯一可以得出的结论是,像Java一样将Java对象转换为XML或JSON等价物并不是那么简单.

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

sis*_*hus 38

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

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

JSON - 哦,好吧,JSON是新的大事.它是一种人类可读的对象序列化格式,比XML简洁.现在非常流行.这是新的魔术子弹,适合你的问题,解决你所有的问题......

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

杰克逊 - 数据绑定库.它支持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以使用Moxy来满足您的对象序列化需求.有一个使用杰克逊的等效包名为jersey-media-json-jackson.

Jettison - 又一个用于将Java对象转换为Json并返回的序列化库.

JSON-P - 用于将JSON作为事件流或通过数据绑定到对象来处理的API.此API仍处于开发阶段.你可能会问是怎么回事,任何人都不会JSON处理没有它-答案是,他们要么使用专有的库API(如杰克逊或莫西),或者他们使用的repurposes JAXB的API使用JSON工作库(杰克逊明确允许使用此,我不确定Moxy).JSON-P可以更轻松地直接使用JSON功能,而不需要JAXB带来的所有XML概念.

  • @ user3705478 API本身只是一个规范,意味着创建接口以定义要遵循的程序规则,以便利用API的预期功能.因此,您的理解是正确的,因为JAX-RS是一个API,而Jersey(以及RESTEasy和Apache CXF)是该规范的实现. (3认同)