【问题标题】:Spring Boot vs. Apache CXF for RESTful Web Services?用于 RESTful Web 服务的 Spring Boot 与 Apache CXF?
【发布时间】: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 的东西。

标签: java spring web-services rest cxf


【解决方案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) 入门。

    一切都已准备就绪。

    详细说明:

    注意,运行 CXF "Standalone" 仍然需要一个 Servlet 容器(Tomcat 或 Jetty),所以以上是在一个小型启动项目中完成、简化和完成的几个步骤。专为不喜欢看方向而只想开始黑客攻击的不耐烦的人(比如我自己)设计。我总是更容易从可行的东西开始,然后对其进行调整。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-03
      • 2018-10-25
      • 1970-01-01
      • 2016-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多