Spring Web API の Quarkus エクステンションの使用
ガイド
概要
はじめに リンクのコピーリンクがクリップボードにコピーされました!
アプリケーション開発者は、Spring Web アノテーションを使用して、Quarkus アプリケーションで RESTful サービスを定義することができます。
Red Hat ドキュメントへのフィードバック (英語のみ) リンクのコピーリンクがクリップボードにコピーされました!
弊社の技術的な内容についてのフィードバックに感謝します。ご意見をお聞かせください。コメントの追加、Insights の提供、誤字の修正、および質問を行う必要がある場合は、ドキュメントで直接行うこともできます。
Red Hat アカウントがあり、カスタマーポータルにログインしている必要があります。
カスタマーポータルからドキュメントのフィードバックを送信するには、以下の手順を実施します。
- Multi-page HTML 形式を選択します。
- ドキュメントの右上にある Feedback ボタンをクリックします。
- フィードバックを提供するテキストのセクションを強調表示します。
- ハイライトされたテキストの横にある Add Feedback ダイアログをクリックします。
- ページの右側のテキストボックスにフィードバックを入力し、送信 をクリックします。
フィードバックを送信すると、自動的に問題の追跡が作成されます。Submit をクリックすると表示されるリンクを開き、問題の監視を開始するか、さらにコメントを追加します。
貴重なフィードバックにご協力いただきありがとうございます。
多様性を受け入れるオープンソースの強化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。
Quarkus は、Spring Web のアノテーションを使用してアプリケーションの REST エンドポイントを定義するための互換レイヤーを提供します。この機能は、デフォルトの JAX-RS アノテーションを使用して REST エンドポイントを定義する代わりに、quarkus-spring-web エクステンションによって提供されます。
Quarkus の Spring 互換レイヤーは、アプリケーションの起動時に Spring Application Context を起動したり、Spring が提供するインフラストラクチャークラスを実行したりしません (例: org.springframework.beans.factory.config.BeanPostProcessor)。Quarkus は Spring クラスおよびアノテーションからのメタデータのみを読み取り、Spring 固有のユーザーコードメソッドの戻り値の型とパラメーター型を解析することができます。ただし、Spring Framework の一部である任意のライブラリーを Quarkus アプリケーションに追加する場合、Quarkus ではこのようなライブラリーを使用するように設計されていないため、適切に機能しません。
本書に従い、Spring Web API の Quarkus エクステンションを使用するサンプルを作成するか、完了したサンプルをダウンロードして表示することができます。完了した Quarkus Spring Web のサンプルを表示するには、これを アーカイブ としてダウンロードするか、または Quarkus サンプル Git リポジトリー をクローンします。Spring Web サンプルは、spring-web-quickstart ディレクトリー にあります。
第1章 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
-
OpenJDK 11 がインストールされ、システムで OpenJDK がインストールされているディレクトリーへのパスと一致するように、
JAVA_HOME環境変数が設定されていること。 - Apache Maven 3.6.2 以降がインストールされていること。
第2章 Spring Web サンプルの Maven プロジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
新しい Quarkus プロジェクトを作成して、REST コントローラークラスを自動的に生成し、Quarkus Maven プラグインを使用して単一のコマンドで quarkus-spring-web 依存関係を追加できます。pom.xml ファイルを更新して、REST コントローラークラスと、REST コントローラーテストクラスを手動で作成することもできます。
手順
このセクションに示されている以下のアプローチのいずれかを使用して、Quarkus Spring Web のサンプル Maven プロジェクトを作成します。
Maven プロジェクトがない場合は、Quarkus Maven プラグインを使用して新しい Maven プロジェクトを作成できます。以下のコマンドを入力し、以下を実行します。
- Maven プロジェクトディレクトリー構造の作成
-
アプリケーションの REST エンドポイントを定義する
org.acme.spring.web.GreetingControllerクラスを作成します。 quarkus-spring-webエクステンションのインポート<project_name>は、プロジェクトファイルが含まれるディレクトリーの名前に置き換える必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
Quarkus Maven プロジェクトがすでにある場合は、コマンドラインを使用して
quarkus-spring-webエクステンションをこれに追加する必要があります。
プロジェクトのルートディレクトリーに移動します。
cd <project_name>
cd <project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow quarkus-spring-webエクステンションをプロジェクトのpom.xmlファイルに追加します。./mvnw quarkus:add-extension -Dextensions="spring-web"
./mvnw quarkus:add-extension -Dextensions="spring-web"Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドを使用して、以下のエントリーを
pom.xmlファイルに追加します。pom.xml
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-spring-web</artifactId> </dependency><dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-spring-web</artifactId> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第3章 GreetingController のメインクラスおよびテストクラスの作成 リンクのコピーリンクがクリップボードにコピーされました!
コマンドラインでプロジェクトを作成すると、Quarkus Maven プラグインは、REST エンドポイントを定義する Spring Web アノテーションを使用した GreetingController クラスファイルおよび GreetingController のユニットテストが含まれるクラスファイルを自動的に生成します。
手順
以下のコードを含む
src/main/java/org/acme/spring/web/GreetingController.javaファイルを作成します。src/main/java/org/acme/spring/web/GreetingController.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコードを含む
src/test/java/org/acme/spring/web/GreetingControllerTest.javaファイルを作成します。src/test/java/org/acme/spring/web/GreetingControllerTest.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第4章 Spring Web サンプルのコンパイルおよび起動 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus Maven プラグインを使用してサンプルアプリケーションをコンパイルして起動します。アプリケーションを ネイティブ実行可能ファイル としてコンパイルして起動ることもできます。
手順
プロジェクトのルートディレクトリーに移動します。
cd <project_name>
cd <project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Quarkus Maven プラグインを使用して、開発モードでアプリケーションを実行します。
./mvnw compile quarkus:dev
./mvnw compile quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow http://localhost:8080/greetingに移動します。以下のメッセージがブラウザーに表示されます。Hello Spring
Hello SpringCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第5章 JSON レスポンスを返すように GreetingController を設定する リンクのコピーリンクがクリップボードにコピーされました!
Spring Web サンプルの設定時に自動的に生成される GreetingController は、テキスト文字列をレスポンスとして返す単純なエンドポイントです。より複雑なアプリケーションでは、レスポンスを JSON 形式で返すように REST コントローラーを設定しなければならない場合があります。以下の例は、JSON コンテンツを返すように Spring RestController を設定する方法を示しています。
手順
以下の例のように、
GreetingControllerクラスを展開します。拡張されたクラスは、greeting および名前が含まれる JSON 形式のレスポンスを返します。Spring Web からPathVariableアノテーションクラスをインポートして、設定が正しく機能することを確認する必要があります。src/main/java/org/acme/spring/web/GreetingController.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
REST エンドポイントに変更を加える場合、REST エンドポイントのユニットテストが含まれるクラスファイルも更新する必要があります。
src/test/java/org/acme/spring/web/GreetingControllerTest.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Quarkus で Spring Web 互換レイヤーを使用すると、com.fasterxml:jackson.core 依存関係がアプリケーションのクラスパスに自動的に追加されて設定される点に留意してください。
第6章 Spring Web サンプルの OpenAPI および Swagger-UI サポートの有効化 リンクのコピーリンクがクリップボードにコピーされました!
Swagger-UI を使用した REST エンドポイントの OpenAPI スキーマドキュメントの生成へのサポートは、quarkus-smallrye-openapi エクステンションを追加することで、アプリケーションに追加することができます。
手順
以下のコマンドを入力し、
quarkus-smallrye-openapiエクステンションを Spring Web サンプルの依存関係として追加します。REST エンドポイントから基本的な OpenAPI スキーマドキュメントを生成するには、エクステンションを追加するだけで十分です。./mvnw quarkus:add-extension -Dextensions="io.quarkus:quarkus-smallrye-openapi"
./mvnw quarkus:add-extension -Dextensions="io.quarkus:quarkus-smallrye-openapi"Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドにより、以下の依存関係が
pom.xmlに追加されます。pom.xml
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-smallrye-openapi</artifactId> </dependency><dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-smallrye-openapi</artifactId> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを入力して、
/q/openapiからスキーマドキュメントを取得します。curl http://localhost:8080/q/openapi
curl http://localhost:8080/q/openapiCopy to Clipboard Copied! Toggle word wrap Toggle overflow YAML 形式の生成された OpenAPI スキーマドキュメントでレスポンスを受け取ります。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第7章 MicroProfile OpenAPI アノテーションの REST コントローラーコードへの追加 リンクのコピーリンクがクリップボードにコピーされました!
MicroProfile OpenAPI アノテーションを REST コントローラーコードに追加し、REST エンドポイントの詳細な OpenAPI スキーマを生成できます。
手順
@OpenApiDefinitionアノテーションをGreetingControllerのクラスレベルに追加します。アノテーションの例に示されているデータを含めます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow @Tagアノテーションを使用してエンドポイント定義にアノテーションを付けます。エンドポイントごとに名前と説明を指定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow アノテーションで指定したデータは、生成された OpenAPI スキーマに表示されます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第8章 Quarkus でサポートされる Spring Web アノテーションの概要 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus の Spring 互換レイヤーは、Spring Web が提供する機能のサブセットを限定的にサポートします。具体的には、Quarkus は Spring Web の REST 関連のアノテーションのみをサポートします (例: @RestController はサポートしますが @Controller はサポートません)。
Quarkus は以下の Spring Web のアノテーションをサポートします。
第9章 Spring Web アノテーションと JAX-RS アノテーションの概要 リンクのコピーリンクがクリップボードにコピーされました!
以下の表は、Spring Web アノテーションを JAX-RS アノテーションに変換する方法を示しています。
| Spring | JAX-RS | 注記 |
|---|---|---|
|
|
JAX-RS アノテーションはありません。 | |
|
|
| |
|
|
| |
|
|
| |
|
|
| |
|
|
| |
|
| JAX-RS にアノテーションはありません。リクエストのボディーに対応するメソッドパラメーターは、アノテーションを必要とすることなく JAX-RS で処理されます。 | |
|
| JAX-RS にアノテーションはありません。 | |
|
| JAX-RS にアノテーションはありません。 | |
|
|
JAX-RS には同等のアノテーションはありません。例外は、 |
第10章 Quarkus でサポートされるコントローラーメソッドのパラメーター型 リンクのコピーリンクがクリップボードにコピーされました!
前述の表の適切な Spring Web アノテーションでアノテーションを付けることができるメソッドパラメーターの他に、javax.servlet.http.HttpServletRequest および javax.servlet.http.HttpServletResponse もサポートされます。ただし、機能するようにするには、ユーザーは quarkus-undertow 依存関係を追加する必要があります。
第11章 Quarkus でサポートされるコントローラーメソッドの戻り値の型 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus で Spring Web を使用する場合、以下のメソッドの戻り値の型がサポートされます。
- プリミティブ型
- 文字列 (リテラルとして使用します。Quarkus は Spring MVC ビューをサポートしません)
- JSON を使用してシリアライズされる POJO クラス
-
org.springframework.http.ResponseEntity
第12章 Quarkus でサポートされる例外ハンドラーメソッドのパラメーター型 リンクのコピーリンクがクリップボードにコピーされました!
Spring Web API の Quarkus エクステンションは、以下の例外ハンドラーメソッドのパラメーター型をサポートします。(型が一覧表示されている順序は任意であり、個々のパラメーター型を使用する際の優先順位を反映したものではありません):
-
例外引数: 一般的な
Exceptionまたはより具体的な例外として宣言されます。これは、アノテーション自体がvalue()を使用して例外型を指定していない場合に、マッピングヒントとしても機能します。 -
(通常は Servlet API からの) リクエストまたはレスポンスオブジェクト (あるいは両方)。特定のリクエストまたはレスポンス型を選択できます (例:
ServletRequestまたはHttpServletRequest)。Servlet API を使用するには、quarkus-undertow依存関係をプロジェクトに追加する必要があります。
Quarkus では、Spring ExceptionHandler Java API ドキュメント に記載されている他のパラメーター型はサポートされません。
第13章 Quarkus でサポートされる例外ハンドラーメソッドの戻り値の型 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus で Spring Web を使用する場合、以下のメソッドの戻り値の型がサポートされます。
-
org.springframework.http.ResponseEntity -
java.util.Map
Quarkus では、Spring ExceptionHandler Java API ドキュメント に記載されている他の戻り値のタイプはサポートされません。