Spring MVC的分离Restful应用程序&休息网络服务

时间:2014-08-08 06:44:10

标签: java rest spring-mvc

我读过一些关于Spring MVC& amp;休息网络服务。 但是我使用spring mvc实现Web应用程序有一个困惑。

我的要求是创建一个基于Spring的Web应用程序并创建将由设备使用的Rest Web服务。

例如。我想获得对象列表。

  1. 此列表将显示在jsp页面上(适用于Web应用程序)
  2. 对象列表将以json(对于远程设备)
  3. 返回

    我正在遵循这种方法来实现这一目标。

    
        //For remote device - return json data
        public List getObjectsInJson() {
            return myService.getAllSomeObjects();
        }
    
    

    
        // Method for getting the view data
        public ModelAndView getObjectsInModelNAndView() {
             // Return ModelAndView
        }
    
    

    请建议这种方法是对的,还是应该为这两种目的创建单独的控制器? 或任何其他方法?

4 个答案:

答案 0 :(得分:1)

根据我在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的工作逻辑。保持这些独立性将允许您在不影响Web API的情况下删除MVC内容。最好的情况是,您可以将事件拆分为两个单独的Web项目。

答案 1 :(得分:0)

最佳方法是创建单个服务并拥有两个不同的控制器。

一个是标准的ModelAndView控制器(@Controller注释)和另一个静止控制器(@RestController注释)。

或者您可以单独使用Rest Controller,并且在JSP中可以使用AJAX调用来获取JSON对象列表并对其进行处理和显示。

答案 2 :(得分:0)

应用程序和服务应该是两个独立的项目,并使用自己的servlet初始化每个项目。它很好并且将它们组合起来但它们没有任何共同之处。您的服务提供数据。您的应用程序只是使用服务的API。在您的示例中,您将使用服务的Java API,这使得拥有REST Web服务变得毫无意义。

  1. 创建REST Web服务
  2. 创建一个通过HTTP使用服务API的应用程序,而不是使用它的Java API。

答案 3 :(得分:0)

似乎这不是最常见的情况,如果你的jsp视图只显示json中的内容 (*),你可以让你的控制器完全不可知实际格式。

Spring MVC ContentNegotiatingViewResolver将委托相关的实际视图解析器,具体取决于URI中的文件扩展名(xxx.json而不是xxx)或Accept HTTP请求标头。

这是关注点分离的严格应用,其中控制器将表示完全委托给(更复杂的)视图层。感兴趣的是添加其他演示文稿(pdf,xls等)将需要对应用程序进行少量修改:添加视图解析器(可选择视图类)并配置ContentNegotiatingViewResolver以使用它。

(*)使用Tiles或其他基于布局的框架可以更简单地实现