web-dev-qa-db-ja.com

RESTfulWebサービス用のSpringBootとApacheCXF?

私はコーディングコンテストに参加しています。タスクは、ユーザーがhttp経由で売買リクエストを投稿できるRESTfulオンラインマーケットプレイスを作成することです。

これらのリクエストを受け入れて保存するフロントエンドWebサービスを構築する必要があります。

技術要件には、SpringブートとCXFの両方が含まれます。私の知る限り、CXFとSpringブートの両方が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リクエストを処理するためのこれら2つのアプローチの根本的な違いを理解するのを手伝ってもらえますか?同じアプリケーションでSpringBootとCXFの両方を使用する方法はありますか?

13
user3899879

SpringMVCとApacheCXFは、HTTPリクエストを処理するための2つの別個のフレームワークであり、REST Webサービスの構築に使用できます。

  • Spring MVCは、Springの「傘」の下にあるプロジェクトです(したがって、その上に構築されているSpringフレームワークに強く結びついています)。
  • Apache CXFは、JAX-RS(REST)およびJAX-WS(SOAP)のオープンソース実装です。 Apache CXFは、スタンドアロンで実行することも、Springアプリケーションに含めることもできます。

REST Webサービスを構築しようとしている場合、それらはほぼ相互に排他的です(1つを選択する必要があります)。構築するだけの場合REST Webサービスの場合、それらはほぼ同等です。HTMLページを提供するためにMVCフレームワークも必要な場合は、Spring MVCにその機能があります(CXFにはありません)。

個人的な意見:Spring MVCは、CXF(より多くのXML構成が必要)よりも簡単に開始できます(ほとんどの構成を処理するSpring Bootのおかげです)。

PS:CXFの例では、@WebService注釈。このアノテーションは、JAX-RS(REST)ではなく、JAX-WS(SOAP)の一部です。あなたはおそらくそれを必要としないでしょう。

31
Christophe L

TomEEを介してTomcatでCXFを活用するJAX-RS(REST)のNiceスターターについては、このプロジェクトを確認してください。

すべてがセットアップされ、準備が整いました。

ここでの長い説明:

CXF「スタンドアロン」を実行するには引き続きサーブレットコンテナ(TomcatまたはJetty)が必要であるため、上記はいくつかの手順を完了し、簡略化して、小さなスタータープロジェクトで完了します。道順を読むのが好きではなく、ハッキングを始めるのが好きな(私のような)せっかちな人々のために設計されています。うまくいくものから始めて、それを微調整するのはいつも簡単です。

1
David Blevins

以下を追加して、Spring Boot CXFJAX-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

1