2016-03-16 67 views
4

我來自Node.js背景,對RESTful Web服務有很好的理解。Jersey,JAXB,JAX-RS,Moxy,Jackson,EclipseLink Moxy,json和xml有什麼關係?

現在我正在嘗試使用Java構建RESTful Web服務。我理解核心Java,但對於基於Java的Web開發來說是全新的。

在我需要使用Jersey框架構建我的RESTful API的一些教程後,我得出結論。我明白Jersey是JAX-RS的某種參考實現。

但我不明白像JAXB,傑克遜的EclipseLink莫西,新澤西媒體MOXY,拋棄,JSON-P JSON,XML等是遇到我的讀數其他各種術語和組件之間的關係。我唯一可以得出的結論是,它不像JavaScript那樣直接將Java對象轉換爲XML或JSON等價物。

我的問題是,如果我正在開發一個基於Java的RESTful API,它們如何配合在一起,上述這些術語之間的關係是什麼。

回答

24

Java世界中有很多術語,可以爲新開發人員創建一個重要的學習曲線。這並不是說使用Java傳遞JSON或XML文檔特別困難,它只是你多年來需要做的各種各樣的部分。我試圖列出我對以下使用的術語的理解...

XML - 您知道XML是什麼,對吧?可擴展標記語言。這是我們在JSON成爲大事之前所擁有的。

JSON - 哦,那麼,JSON是新的大事情。它是一種人類可讀的對象序列化格式,不比XML冗長。時下非常流行。這是新的靈丹妙藥,對你將面臨的所有問題都有好處...

JAXB - Java生態系統中的「用於XML綁定的Java架構」是將XML數據轉換爲對象的主要機制,然後可以互動,反之亦然。認識到它是一個API而不是一個實現很重要,所以它主要在javax.xml.bind包中定義了一組註釋和簡單的類/接口。爲了做任何有用的JAXB,你需要一個實現。 Glassfish應用服務器中包含了一個參考實現。大多數應用服務器都會有一些JAXB的實現。

Jackson - 用於數據綁定的庫。它支持XML和JSON作爲文檔格式,並實現JAXB API。您可以使用Jackson作爲您的JAXB實現,或者您可以直接使用Jackson API。

EclipseLink Moxy - JAXB API的替代實現。像傑克遜一樣,它也有自己的API。您可以選擇使用它,也可以不使用它。你可能不想同時使用傑克遜和Moxy。如上所述,Jersey是JAX-RS的一個實現。 JAX-RS的一個方面是傳遞文檔 - 通常是XML或JSON。要做到這一點,Jersey需要知道底層庫用於數據綁定或流處理。所以jersey-media-moxy作爲一種球衣插件依賴項存在,您可以使用它配置Jersey以使用Moxy來滿足您的對象序列化需求。有一個相當於使用jackson的軟件包叫jersey-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概念。

+0

在解釋JAXB時,你提到「API而不是實現」,有什麼區別? API是應用程序編程接口,您可以在其中實現一些應用程序,並且可以讓其他程序使用它。那麼它與實現有什麼不同呢?我和OP一樣,是Java Web開發世界的新手。請啓發我們。謝謝。 – user3705478

+0

幾分鐘後......我讀了這個「Jersey-media-moxy--正如你所提到的,Jersey是JAX-RS的一個實現」 - 由於Jersey是JAX-RS的實現,那麼JAX-RS是一個API是一些簡單的類/接口)? – user3705478

+2

@ user3705478一個API本身只是一個規範,這意味着創建接口來定義程序遵循的規則,以便利用API的預期功能。所以你的理解是正確的,因爲JAX-RS是一個API,Jersey(以及RESTEasy和Apache CXF)是該規範的實現。 –

相關問題