簡體   English   中英

Spring MVC Restful應用程序與Rest Web服務的分離

[英]Separation of Spring MVC Restful application & Rest web service

我已經閱讀了一些有關Spring MVC和Rest Web服務的文章。 但是我對使用spring mvc實現Web應用程序感到困惑。

我的要求是創建一個基於Spring的Web應用程序,並創建供設備使用的Rest Web服務。

例如。 我想獲取對象列表。

  1. 此列表將顯示在jsp頁面上(對於Web應用程序)
  2. 對象列表將作為json返回(對於遠程設備)

我正在按照這種方法來實現這一目標。

//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服務變得毫無意義。

  1. 創建您的REST Web服務
  2. 創建您的應用程序,該應用程序通過HTTP而不是Java API來使用您的服務API。

看來這不是最常見的情況, 前提是您的jsp視圖僅顯示json (*)中的內容 ,您可以讓控制器完全不了解實際格式。

Spring MVC ContentNegotiatingViewResolver將委托給相關的實際視圖解析器,具體取決於URI(xxx.json而不是xxx)中的文件擴展名或Accept HTTP請求標頭。

這是關注點分離的嚴格應用,其中控制器將演示完全委派給(更復雜的)視圖層。 有趣的是,添加其他演示文稿(pdf,xls等)幾乎不需要對應用程序進行任何修改:添加視圖解析器(可選為視圖類)並配置ContentNegotiatingViewResolver以使用它。

(*)使用Tiles或其他基於布局的框架更容易實現

暫無
暫無

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

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