Apache Wink 正在快速成長為 JAX-RS 1.0 規範的標準實現之一。Apache Wink 版本附帶的面向 JSON 編組和解組的提供者,例如 JSON.org 和 Jettison,在數組表示方面有一些問題,並且傳回型別比較有限。編寫 JAX-RS 服務及其客戶 Asynchronous JavaScript and XML (Ajax)應用程式非常困難。在本文中,學習如何配置一個現有的支援 Apache Wink 的 Web 應用程式,從而使用 Jackson JSON 提供者來解決一些問題。將使用一個簡單的支援 Jackson 的 JAX-RS Web 服務的程式碼範例示範這個提供者的優點。
簡介
Apache Wink 正在快速成長為 JAX-RS 1.0 規範的標準實現之一。JSON.org 和 Jettison 是 JSON 同步的預設提供者,但是它們自身存在某些問題。例如,它們的數組表示和有限的傳回型別使編寫 JAX-RS 服務及其客戶 Ajax 應用程式變得很困難。
本文概述了一個配置現有的支援 Apache Wink 的 Web 應用程式來使用 Jackson JSON 提供者的方法。通過使用一個簡單的支援 Jackson 的 JAX-RS Web 服務的 範例代碼 來瞭解這種提供者的優點。
Apache Wink 附帶的 JSON 提供者
Apache Wink 打包了兩個 JSON 提供者作為標準版本的一部分:JSON.org 和 Jettison 實施。這兩個提供者都會使 Wink 服務和 AjaxBoth 應用程式的整合複雜化。這兩個提供者都不能直接將一個 Java 列表作為傳回型別序列化到 JSON,因為 JAXB 需要一個封裝的 XML 元素。這兩者還有一些其他問題,例如:
JSON.org
JSON.org 提供者的數組序列化是可預見的,但是這個行為在和 Ajax 互動時是不可取的。當它顯示各種大小不同的數組時,JSON.org 會以不同的方式呈現它們:
2+:“正確的” 數組序列化。例如:object : { array : ["element1", "element2"] }
1:摺疊數組。例如:object : { array : "element1" }
0:完全刪除數組。例如:object : { }
很明顯,在 Javascript 中對不同結構的編碼限制會導致多餘的、不必要的複雜性。
Jettison
Jettison 對 JSON 產生使用 Badgerfish 慣例,這將產生一種結構,這種結構在轉換為 Javascript 對象後很難進行導航。
Jackson
Jackson 本質上就是一個 JSON 處理器,用於 Java 對象的 JSON 表示的產生和解析。還可以對 Jackson 進行配置,作為 JAX-RS 實現的一個 JSON 序列化提供者。
作為一個 JAX-RS JSON 序列化提供者,如下所述,Jackson 有幾個 JSON.org 和 Jettison 所沒有的優點。
表 1. Jackson 的優點
優點 |
描述 |
在本地序列化列表的能力 |
Jackson 可以直接從服務中返回一個字串對象的列表,無需一個封裝的 XML 元素。 |
數組處理 |
Jackson 擁有良好的、可預見的數組序列化設施。 |
速度 |
具有比其他提供者更快的速度。 |
許可 |
Apache License 2.0 得到了很好的理解。使用該許可的組件被用於商業和免費軟體產品。 |