4

对于基于 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. 使用公共依赖项构建一个单独的新 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>

还有我的弹簧上下文描述符:

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

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

4

3 回答 3

3

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

集成/分离:我建议您将 REST 应用程序与您的 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 版本中解决,但尚未最终确定。

于 2012-10-26T15:36:34.127 回答
1

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

GUI WebApp WS WebApp 业务通用神器

您可以根据需要升级每个 webapp。

希望能帮助到你。

于 2012-10-26T18:01:16.923 回答
1

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

于 2019-01-31T01:49:24.557 回答