[英]Separation of Spring MVC Restful application & Rest web service
我已經閱讀了一些有關Spring MVC和Rest Web服務的文章。 但是我對使用spring mvc實現Web應用程序感到困惑。
我的要求是創建一個基於Spring的Web應用程序,並創建供設備使用的Rest Web服務。
例如。 我想獲取對象列表。
我正在按照這種方法來實現這一目標。
//For remote device - return json data public List getObjectsInJson() { return myService.getAllSomeObjects(); }
和
// Method for getting the view data public ModelAndView getObjectsInModelNAndView() { // Return ModelAndView }
請指出這種方法是正確的,還是我應該為這兩個目的創建單獨的控制器? 或任何其他方法?
根據我在ASP.NET MVC中的經驗(與您所使用的比較),以及Spring的Restful API,我建議您使用單獨的控制器。
Web API(指的是您使用JSON向設備公開的API等)實際上是數據表示和傳輸的標准形式。 它不限於某些設備,任何Web應用程序都可以從此類API中受益。 例如,您可以創建一個純html5應用程序,並使用javascript使用該API。 簡而言之,這是某種程度上與前端無關的方法。
另一方面,使用控制器和視圖對象的經典MVC方法與所選的前端技術(在您的情況下為Spring MVC + JSP)更加緊密地結合在一起。 結果和交流取決於特定的技術,因此將它們分開是一個不錯的決定。
例如,如果您需要定位單獨的UI技術(例如移動設備上的本機應用程序),或者想要放棄JSP + Spring MVC前端以使用其他東西,則可以證明這種分離的示例場景。 如果為Web API和MVC維護一個控制器,則必須對該控制器進行更改,並可能損害Web API的工作邏輯。 將它們分開,可以使您刪除MVC內容而不影響Web API。 充其量,您甚至可以將它們分成兩個單獨的Web項目。
最好的方法是創建一個服務並具有兩個不同的Controller。
一種用於標准ModelAndView控制器(@Controller注釋),另一種用於Rest Controller(@RestController注釋)。
或者,您可以單獨使用Rest Controller,並且在JSP中可以使用AJAX調用來獲取JSON對象的列表並對其進行處理和顯示。
應用程序和服務應該是兩個單獨的項目,並且您使用各自的servlet對其進行初始化。 很好,可以將它們組合在一起,但是它們沒有共同之處。 您的服務提供了數據。 您的應用程序僅使用該服務的API。 在您的示例中,您使用了服務的Java API,這使得擁有REST Web服務變得毫無意義。
看來這不是最常見的情況, 前提是您的jsp視圖僅顯示json (*)中的內容 ,您可以讓控制器完全不了解實際格式。
Spring MVC ContentNegotiatingViewResolver
將委托給相關的實際視圖解析器,具體取決於URI(xxx.json而不是xxx)中的文件擴展名或Accept HTTP請求標頭。
這是關注點分離的嚴格應用,其中控制器將演示完全委派給(更復雜的)視圖層。 有趣的是,添加其他演示文稿(pdf,xls等)幾乎不需要對應用程序進行任何修改:添加視圖解析器(可選為視圖類)並配置ContentNegotiatingViewResolver
以使用它。
(*)使用Tiles或其他基於布局的框架更容易實現
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.