我读过一些关于Spring MVC& amp;休息网络服务。 但是我使用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 }
请建议这种方法是对的,还是应该为这两种目的创建单独的控制器? 或任何其他方法?
答案 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服务变得毫无意义。
答案 3 :(得分:0)
似乎这不是最常见的情况,如果你的jsp视图只显示json中的内容 (*),你可以让你的控制器完全不可知实际格式。
Spring MVC ContentNegotiatingViewResolver
将委托相关的实际视图解析器,具体取决于URI中的文件扩展名(xxx.json而不是xxx)或Accept HTTP请求标头。
这是关注点分离的严格应用,其中控制器将表示完全委托给(更复杂的)视图层。感兴趣的是添加其他演示文稿(pdf,xls等)将需要对应用程序进行少量修改:添加视图解析器(可选择视图类)并配置ContentNegotiatingViewResolver
以使用它。
(*)使用Tiles或其他基于布局的框架可以更简单地实现