【问题标题】:RESTful API for a SpringMVC appSpringMVC 应用程序的 RESTful API
【发布时间】:2012-10-16 20:52:00
【问题描述】:

对于基于 SpringMVC (3.0.1) 堆栈构建的现有 GUI webapp,我想公开一个 RESTful API。您认为什么是合理的选择?

  1. 与 Jersey 等其他框架集成(似乎要从头开始)?
  2. 使用 JAXB/Jackson 的内置 SpringMVC 集成?
  3. 我是否应该将另一个 servlet 映射 /api/* 添加到相同的 DispatchServlet 中?
  4. 所有视图都用jsp编码。我应该为我的 XML API 使用 jsp 模板吗?
  5. 使用公共依赖项构建一个单独的新 Web 应用?
  6. 还有别的吗?

以下是我的 web.xml:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">

    <welcome-file-list>
        <welcome-file>home.html</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>spring-mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>spring-mvc</servlet-name>
        <url-pattern>/web/*</url-pattern>
    </servlet-mapping>

</web-app>

还有我的 spring 上下文描述符:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:security="http://www.springframework.org/schema/security" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/security 
            http://www.springframework.org/schema/security/spring-security-3.0.xsd
            http://www.springframework.org/schema/mvc 
            http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"
>

    <context:component-scan base-package="net.mycrub.poc.controllers" />

    <bean id="viewResolver" 
        class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
        p:prefix="/WEB-INF/jsp/views/" 
        p:suffix=".jsp"
        p:viewClass="org.springframework.web.servlet.view.JstlView" />

</beans>

提前致谢;欢迎使用映射示例:-)

【问题讨论】:

    标签: java rest spring-mvc


    【解决方案1】:

    这个问题已经有好几年了,无论如何,今天一个合理的方法是将 Spring webapp 迁移到 Spring Boot,包括 Spring Data REST 模块。所有 JPA 存储库都将自动导出为全面且可发现的 REST API。

    【讨论】:

      【解决方案2】:

      这取决于几个因素。我要问的第一个问题是关于性能的。如果您只有一个 webapp,则 GUI 用户或 WS 用户都可能使服务器过载。因此,也许更好的解决方案是拥有 3 个不同的工件。

      GUI WebApp WS 网络应用程序 业务通用神器

      您可以根据需要升级每个 web 应用程序。

      希望对你有帮助。

      【讨论】:

        【解决方案3】:

        我会回答你的几个问题...

        集成/分离:我建议您将 REST 应用程序与您的 WEB GUI 分开构建。人们构建 API 的一个重要原因是将其公开给多个应用程序,因此我不会将 WEB GUI 与 API 紧密联系在一起。这种思想符合整个关注点分离的概念。例如,如果您稍后构建一个移动应用程序来访问相同的 API,如果您需要关闭您的 WEB GUI 进行部署,它不会受到影响。

        Jackson/JAXB:我强烈推荐 Jackson。在我看来,它是性能和功能的最佳组合。

        Spring MVC/Jersey:我建议坚持使用 Spring 有几个原因:

        1.) 学习曲线较少,如果您已经熟悉 Spring,那么坚持使用它并没有错。

        2.) 今天泽西岛的依赖注入或多或少被破坏了 (http://java.net/jira/browse/JERSEY-517)。因此,如果您像我一样习惯了它在 Spring 中的效果,那么切换到 Jersey 会很痛苦。这应该在 2.0 版本中解决,但尚未最终确定。

        【讨论】:

          猜你喜欢
          • 2018-03-04
          • 2019-06-14
          • 2014-12-07
          • 2015-05-09
          • 1970-01-01
          • 2012-09-12
          • 2011-07-08
          • 2015-09-17
          • 1970-01-01
          相关资源
          最近更新 更多