簡體   English   中英

我可以讓Jersey在全局/默認情況下使用自然JSON表示法嗎?

[英]Can I get Jersey to use natural JSON notation globally/as default?

我正在使用Jersey為服務構建REST API。 我希望能夠接受並返回JSON和XML,並且主要使用它,但我不喜歡Jersey喜歡吐出的JSON的默認“映射”風格。

我知道更新的“自然”符號(來自http://jersey.java.net/nonav/documentation/latest/json.html ,我會詳細引用它,因為它顯然存在默認“映射”的問題符號):

在使用映射的JSON表示法一段時間后,很明顯,需要手動配置所有各種事情可能有點問題。 為了避免手動工作,在Jersey版本1.0.2中引入了一種新的,自然的JSON表示法。 使用自然符號,Jersey會自動確定需要處理的各個項目,因此您無需進行任何類型的手動配置。 Java數組和列表被映射到JSON數組,即使對於單元素情況也是如此。 Java數字和布爾值正確映射到JSON數字和布爾值,你不需要打擾XML屬性,就像在JSON中一樣,它們保留了原始名稱

並且想在任何地方使用它,但我無法弄清楚如何使用它。 我正在通過Tomcat的XML配置文件實例化/配置Jersey - 使用我認為是與servlet / servlet-class / init-param標簽的正常舞蹈 - 但我無法找到有關它是否或如何的文檔可以從那里指定JSONConfiguration選項。

我也嘗試實現自己的ContextResolver,它應用了我從Java代碼實例化的JSONJAXBContext,我可以在其中應用JSONConfiguration.natural()(這個例子就像這個答案 )。 這是有效的,但僅適用於我在該代碼中明確列出的類型,並傳遞給JSONJAXBContext構造函數。 這個額外的代碼不僅可以編寫和維護,而且如果我添加更多的數據類也會更改,但它不適用於像List這樣的東西。

有沒有辦法告訴澤西島只使用自然符號而不是映射符號,總是和所有類型?

我從來沒有找到我在這里問的實際問題的答案,但我發現了一個簡單的3步過程,它完成了我想要的最終結果:

  • Jackson添加到我的項目中
  • 配置Jersey以啟用FEATURE_POJO_MAPPING
  • 因為事實證明這么簡單,所以在頭上拍了幾下頭。

Jersey文檔突出地提到了這個POJOMappingFeature / FEATURE_POJO_MAPPING(這是我在問題中鏈接的doc頁面中的第一個例子),但沒有准確描述它的含義,並且從文檔呈現其信息的方式我認為這個選項(5.1 ,“POJO支持”)與選項5.2(“基於JAXB的JSON支持”)不一致,這聽起來更像我想要的。 所以在嘗試啟用FEATURE_POJO_MAPPING之前我嘗試了很多其他的東西。

但是一旦我嘗試了它,它就像我想要的那樣工作,而且我沒有必要回頭看。

這樣做的另一個好處是,與Jersey的本機JSON處理實現相比,在客戶端傳遞偽造JSON內容的情況下,Jackson會生成更好的錯誤消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM