2012-11-21 19 views
3

要求 我正在構建REST API。它有兩個REST調用。調用/格式根據提供的參數輸出格式化的JSON。具有相同參數的調用/ raw應輸出JSON與原始值(不帶格式)。這裏的格式將是特定於語言環境的,例如日期更改,爲值顯示正確的貨幣,十進制格式,時間格式等。如何在CXF,Spring和Jackson上使用多個JSON提供程序

工具 Java,Tomcat,Spring,Apache CXF,JAX-RS和Jackson。

執行 REST服務設置正常,工作正常。那裏沒有問題。我寫了獨立的自定義序列化程序,其中我使用NumberFormat,DateFormat,DecimalFormat等提供了所需格式。我已將Jackson的SimpleModule擴展到註冊我上面提到的所有自定義序列化程序。我使用了兩個獨立的ObjectMapper(FomatOM和RawOM).FormatOM將自定義模塊註冊爲格式化的JSON輸出,RawOM則根據需要爲原始JSON輸出。這兩個objectmappers被註冊到兩個不同的JacksonJsonProviders並在我的spring config xml中聲明爲bean。對於/格式我使用FormatOM與自定義序列化器,並在/原始使用RawOM。

問題 它不工作,因爲我會預料到的。我期望當我通過/格式調用請求時,將使用FormatOM,並且將使用RawOM。發生的事情是我首先撥打的任何一個電話,隨後的呼叫使用相同的ObjectMapper。因此,如果第一個電話是/ raw;隨後調用/ format或/ raw渲染原始JSON輸出。一個Tomcat重啓後,如果第一個電話是/格式,那麼隨後要麼API調用調用渲染JSON格式輸出

問題 1.你如何達到我的要求呈現格式化+生JSON 輸出? 2.我的實施有什麼問題? 3.任何想法或建議或批評? 4.任何其他方式有基於請求的映射器?

感謝

+0

只是在玩代碼,我會嘗試自動裝配JacksonJsonProvider併爲每個請求注入映射器。將報告回來,如果它爲我工作。 – andthereitgoes

回答

0

一個解決辦法是隻使用StreamingOutput,並在那裏捆綁特定ObjectMapper,用它直接(ObjectMapper.writeValue(output, value);

0

謝謝您的回答StaxMan。由於我使用的是Spring,因此我決定注入JacksonJsonProvider並執行JacksonJsonProvider.setMapper(mapper)來爲每個請求設置映射器。如果有人嘗試過上述方法並遇到問題,請告訴我。如果我遇到任何問題,我會更新這個答案。

相關問題