Spring Boot vs. Apache CXF for RESTful Web Services?

2022-09-03 04:06:23

我是编码竞赛的一部分,任务是创建一个RESTful在线市场,用户可以在其中通过http发布买卖请求。

我需要构建一个接受并存储这些请求的前端 Web 服务。

技术要求包括弹簧靴和CXF。据我所知,CXF和Spring boot都能够接受http请求。

在弹簧启动中,您可以使用如下控制器:

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


答案 1

Spring MVC和Apache CXF是两个独立的框架来处理HTTP请求,可用于构建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示例中,您有一个注释。此注释是 JAX-WS (SOAP) 的一部分,而不是 JAX-RS (REST) 的一部分。您可能不需要它。@WebService


答案 2

使用 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