Spring Boot和Apache CXF哪个更适合RESTful Web Services?

16

我参加了一个编程比赛,任务是创建一个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?


3
这个“spring sample”实际上不是Spring Boot,它更像是Spring MVC。你可能正在使用Spring Boot来启动和运行你的应用程序,但你所使用的代码是Spring MVC相关的。 - Chris DaMour
3个回答

38

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更容易入门(感谢Spring Boot为您处理大部分配置),后者需要更多的XML配置。

附:在您的CXF示例中,您有一个@WebService注释。该注释是JAX-WS(SOAP)的一部分,而不是JAX-RS(REST)。您可能不需要它。


这里只是一个小注释;使用REST WS,然后REST web服务真的让我感到困惑,认为它们必须是不同的东西(也许它们确实是?)。也许需要进行一些小的编辑,使其更加清晰明了。 - Samih3
我最初从这个答案中理解Spring框架不适用于SOAP项目,但是现在看来我误解了,例如在这里:https://howtodoinjava.com/spring-boot/spring-boot-soap-webservice-example/ 。顺便说一下,Spring框架也是开源的。 - WebViewer

2

通过添加以下内容,使用Spring Boot CXF JAX-RS starter:

<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

1

查看这个项目,它是一个很好的JAX-RS(REST)起步项目,通过TomEE在Tomcat上利用CXF。

一切都已经设置完毕,准备就绪。

长描述在此:

注意,运行CXF "Standalone"仍需要一个Servlet容器(Tomcat或Jetty),因此上述内容是在一个小的启动项目中完成的,简化了几个步骤并完成了。这个项目设计为给那些不喜欢阅读说明书,只想开始编程的急性子人(比如我)使用。对我来说,先用一些可行的东西开始然后再进行调整总是更容易的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接