Java 后端体系结构:RESTfulWeb服务

Java 后端体系结构:RESTfulWeb服务,java,spring,rest,architecture,Java,Spring,Rest,Architecture,我正在为一个网站创建一个后端基础设施。显然,后端基础设施需要与前端无关,它可以是网站、移动站点、移动应用程序、其他服务,任何东西 我计划把它写成RESTfulWeb服务,我还希望有依赖注入、事务管理和持久性框架。这里的限制是我将使用ApacheTomcatWeb服务器,因此我不能使用EJB(我不能使用JBoss或其他应用服务器) 我最初的想法是使用Spring框架,它坚固、支持良好,并且可以轻松地满足我的所有需求。我有点犹豫,因为我只是希望REST端点没有视图,而如果我使用Spring,它将通过

我正在为一个网站创建一个后端基础设施。显然,后端基础设施需要与前端无关,它可以是网站、移动站点、移动应用程序、其他服务,任何东西

我计划把它写成RESTfulWeb服务,我还希望有依赖注入、事务管理和持久性框架。这里的限制是我将使用ApacheTomcatWeb服务器,因此我不能使用EJB(我不能使用JBoss或其他应用服务器)

我最初的想法是使用Spring框架,它坚固、支持良好,并且可以轻松地满足我的所有需求。我有点犹豫,因为我只是希望REST端点没有视图,而如果我使用Spring,它将通过SpringMVC框架。在没有视图部件的情况下使用Spring MVC正常吗

我的选择是有意义的还是有其他框架我应该考虑? 我研究了JAX-RS作为REST框架的另一种替代方案,但是我没有得到依赖注入/事务管理/持久性框架,我最终不得不使用其他框架来获得这些

我还注意到有一个项目听起来也能解决我的问题


谢谢你的想法。提前谢谢

我会将Jersey与JAXB结合使用来绑定到您的域类 可以在此处找到一个好的教程:


请注意,当使用hibernate/jpa时,JAXB无法处理延迟加载的模型(您需要编写适配器类)

是的,Spring3MVC是一个优秀的框架,我正在其上创建也支持RESTfulWeb服务的应用程序。主要的好处是:控制器类的返回值自动转换为JSON对象。使用或不使用视图-这取决于您,没有视图时一切都可以正常工作

Tomcat并不意味着没有EJB。Tomcat7为您带来了JAVEE6,然后您可以使用EJB和CDI技术。我目前正在开发一个使用以下技术堆栈的软件:

  • JAX-RS RESTful前端,将服务调用委托给
  • 服务EJB-s,它们使用@InjectCDI注释注入RESTful类
不使用弹簧具有以下优点:

  • 少一个3pp依赖,少一个所需的技术。这显然不是优势
  • 坚持使用标准JavaEE技术可以使您的应用程序具有可移植性(或多或少)
相反,我认为Spring是如此广泛和有充分的文献记载,与之合作是一种魅力。Spring的可移植性也很好,与Spring相比,我在不同EE供应商之间遇到的不同CDI错误和错误实现(?)问题更多。我认为Spring不会强迫您采用MVC方式。你可以部分使用它,也可以随意混合使用。如果你知道引擎盖下面是什么,那么你可以非常灵活地使用弹簧


备注:请稍微考虑一下身份验证。RESTful意味着基本的身份验证,但webapps通常需要一个奇特的登录页面,而且基本的身份验证弹出窗口很难抑制。我们使用SSO来解决这个问题,一个webapp具有表单auth和奇特的登录屏幕,在RESTful服务中为其他客户端提供基本的auth。SSO导致在第一个应用中登录对RESTful调用也是有效的。

Im使用Spring Rest数据,方式相同:服务器只使用JSON响应,而不关心客户端对数据的处理。 我还想知道如何使用MVC,但没关系,没问题

延迟加载:从我的观点来看,只有两种方法:

  • 从数据库加载所有内容并将其发送到客户端
  • 将引用序列化为链接,就像SpringREST数据所做的那样。客户端可以/必须决定加载哪个
  • 在demo.appdriver.com上有一个使用SpringREST数据的实时演示应用程序
    你可以在

    访问API我也这么想,我只是想知道如果不使用“视图”,而让控制器返回JSON,是否违反了“MVC”的目的,因为它有点像“M-C”,我想,在这种情况下,MVC中的V-将响应表示为JSON而不是HTML。@EvgeniyFitner我尝试了您描述的内容,但我无法让它返回JSON。因此,我尝试jersey/hibernate。要返回JSON,必须在spring配置中设置:1)JSON messageConverter,因为spring不知道您想要什么2)控制器方法必须注释为@ResponceBody。正如您所看到的,非常简单,谢谢。我想知道的是,如果我使用Spring违反了某种最佳实践。我的思路和您描述的一样,尽可能地精简,但是Spring是如此广泛和“标准”。公平地说,Hibernate以一种与JAXB(和其他技术)不兼容的方式实现延迟加载。与JAXB兼容的其他JPA提供者(如EclipseLink)已经实现了延迟加载。