适用于SpringMVC应用程序的RESTful API

时间:2012-10-26 15:04:31

标签: java rest spring-mvc

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

  1. 与Jersey等其他框架集成(似乎从头开始重启)?
  2. 使用JAXB / Jackson内置的SpringMVC集成?
  3. 我应该将另一个servlet-mapping /api/*添加到同一个DispatchServlet吗?
  4. 所有视图都以jsp编码。我应该为我的XML API使用jsp模板吗?
  5. 构建一个具有公共依赖关系的单独的新webapp?
  6. 还有别的吗?
  7. 此后是我的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>
    

    我的春天上下文描述符:

    <?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>
    

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

3 个答案:

答案 0 :(得分:3)

我会抓住你的一些问题......

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

杰克逊/ JAXB :我强烈推荐杰克逊。在我看来,它具有最佳的性能和功能组合。

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

1。)学习曲线较少,如果你对Spring已经熟悉,坚持下去就没有错。

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

答案 1 :(得分:1)

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

GUI WebApp WS WebApp 商业普通神器

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

希望它有所帮助。

答案 2 :(得分:1)

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