什么是支持REST的基于Java Web的应用程序的良好技术堆栈?

时间:2011-03-06 19:45:46

标签: java rest

晚上所有:)

我正在寻找创建Java Web应用程序。我设想它将使用Spring Web MVC和JSP,但是我想将某些功能公开为REST调用,这样我就可以创建一个Android客户端。

春天在这方面有什么可以帮助我吗?如何将REST代码和Web前端代码分开,而不必维护我的应用程序的两个版本(一个用于Web,一个用于REST客户端)。

不寻找勺子喂食,只是我应该开始阅读的一些指示。

6 个答案:

答案 0 :(得分:5)

正如其他人所提到的,Spring现在拥有相当不错的内置REST支持。与注释结合使用时,可以非常简单地设置RESTful API。可以使用不同的view resolvers配置Spring,例如,可以根据Accept标头自动响应不同的数据视图。因此,您可以从相同的数据中自动返回JSON或JSP,请参阅ContentNegotiatingViewResolver。您的控制器和模型可以是常见的并实现一次,将工作保留在视图层中。

我之前使用过这种方法,当请求是通过AJAX返回JSON时,以及在浏览器访问时使用相同数据构建的JSP视图。

答案 1 :(得分:4)

Jersey是一个非常漂亮的工具。它与Spring,Guice和Jackson等工具很好地集成,为您提供了一种创建RESTful资源的无缝方式。

答案 2 :(得分:4)

Jersey非常简单,效果很好,并且可以作为引导的参考实现。此外,它还有一些不错的REST客户端支持,其中很多可能会成为JAX-RS规范。

在与Spring MVC结合方面,我建议您确保为应用程序建模,以便拥有提供所需核心功能的外观(服务类),然后根据需要在MVC中引用它们代码或REST代码。你不应该重复业务逻辑

答案 3 :(得分:2)

您可以使用Spring 3.0执行此操作。 Spring 3.0的出现能够指定@PathVariable来从URL路径中提取值(以前在Spring MVC中这并不容易)。

您还可以使用@RequestMapping来指定控制器中每个方法应该响应的HTTP方法。

我还使用Spring Security来实现API密钥类型的功能。这样,您可以以易于REST客户端实现的方式限制对API的访问。我不得不扩展org.springframework.web.filter.GenericFilterBean并添加一个正确的身份验证

SecurityContextHolder.getContext().setAuthentication(apiKeyAuth)

答案 4 :(得分:1)

答案 5 :(得分:1)

Apache CXF与Spring集成良好,并提供了许多公开服务的方法。从CXF主页的概述部分:

  

CXF帮助您建立和发展   使用前端编程的服务   API,如JAX-WS和JAX-RS。这些   服务可以说各种各样的   SOAP,XML / HTTP等协议   RESTful HTTP,或CORBA,并在一个   各种传输,如HTTP,   JMS或JBI。