用于 RESTful Web 服务的 Spring Boot 与 Apache CXF?
Posted
技术标签:
【中文标题】用于 RESTful Web 服务的 Spring Boot 与 Apache CXF?【英文标题】:Spring Boot vs. Apache CXF for RESTful Web Services? 【发布时间】:2014-09-24 19:45:37 【问题描述】:我是编码竞赛的一员,任务是创建一个 RESTful 在线市场,用户可以在其中通过 http 发布买卖请求。
我需要构建一个接受并存储这些请求的前端 Web 服务。
技术要求包括 Spring Boot 和 CXF。据我所知,CXF 和 Spring boot 都能够接受 http 请求。
在 Spring Boot 中,您使用如下控制器:
@Controller
@EnableAutoConfiguration
public class controller
@RequestMapping("/")
@ResponseBody
String home()
return "Hello, World!";
而对于 CXF(使用 javax.ws.rs),代码可能如下所示:
@WebService(serviceName = "MarketService", targetNamespace = "http://localhost:9005")
@Consumes( MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON )
@Produces( MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON )
public interface MarketService
@GET
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces( MediaType.APPLICATION_JSON )
@Path("/sells/id")
public prod getProduct(@PathParam("id") int id);
有人可以帮我理解这两种处理 http 请求的方法之间的根本区别吗?有没有办法在同一个应用程序中同时使用 Spring Boot 和 CXF?
【问题讨论】:
spring 示例真的不是 spring boot……它看起来更像 spring-mvc。您可能正在使用 spring-boot 来启动并运行您的应用程序......但您使用的代码是 spring-mvc 的东西。 【参考方案1】:通过添加以下内容来使用 Spring Boot CXF JAX-RS 启动器:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxrs</artifactId>
<version>3.1.7</version>
</dependency>
另请参阅:http://cxf.apache.org/docs/springboot.html
【讨论】:
【参考方案2】:Spring MVC 和 Apache CXF 是处理 HTTP 请求的 2 个独立框架,可用于构建 REST Web 服务。
Spring MVC 是 Spring“保护伞”下的一个项目(因此与构建它的 Spring 框架紧密相关), Apache CXF 是 JAX-RS (REST) 和 JAX-WS (SOAP) 的开源实现。 Apache CXF 可以独立运行,也可以包含在 Spring 应用程序中。如果您希望构建 REST Web 服务,它们几乎是互斥的(您必须选择一个)。如果您要做的只是构建 REST Web 服务,那么它们几乎是等价的。如果您还需要一个 MVC 框架来服务 HTML 页面,那么 Spring MVC 具有该功能(CXF 没有)。
个人意见:Spring MVC 比 CXF(需要更多 XML 配置)更容易上手(感谢 Spring Boot 为您处理大部分配置)。
PS:在您的 CXF 示例中,您有一个 @WebService
注释。此注释是 JAX-WS (SOAP) 的一部分,而不是 JAX-RS (REST)。你可能不需要它。
【讨论】:
这里的通知中的一点评论;使用 REST WS 然后 REST Web 服务真的让我感到困惑,认为这些肯定是不同的东西(也许它们是??)。可能需要稍作修改以使其更清晰。【参考方案3】:查看此项目,了解如何通过 TomEE 在 Tomcat 上利用 CXF 的 JAX-RS (REST) 入门。
一切都已准备就绪。
https://github.com/tomitribe/tomee-jaxrs-starter-project详细说明:
http://www.tomitribe.com/blog/2014/06/apache-tomee-jax-rs-and-arquillian-starter-project注意,运行 CXF "Standalone" 仍然需要一个 Servlet 容器(Tomcat 或 Jetty),所以以上是在一个小型启动项目中完成、简化和完成的几个步骤。专为不喜欢看方向而只想开始黑客攻击的不耐烦的人(比如我自己)设计。我总是更容易从可行的东西开始,然后对其进行调整。
【讨论】:
以上是关于用于 RESTful Web 服务的 Spring Boot 与 Apache CXF?的主要内容,如果未能解决你的问题,请参考以下文章
spring-cloud 构建一个restful的web服务
如何使用 Spring RESTful Web 服务处理 CSRF 保护?
[译]Spring Boot 构建一个RESTful Web服务