RESTAPI:JAX-RSとSpring
1. 概要
このチュートリアルでは、RESTAPI開発におけるJAX-RSとSpringMVCの違いを確認します。
2. JakartaRESTfulWebサービス
JAVA EE の世界の一部になるには、機能に仕様、互換性のある実装、およびTCKが必要です。 したがって、 JAX-RS は、RESTサービスを構築するための一連の仕様です。 その最もよく知られている参照実装はRESTEasyとJerseyです。
それでは、簡単なコントローラーを実装して、Jerseyに少し慣れましょう。
@Path("/hello")
public class HelloController {
@GET
@Path("/{name}")
@Produces(MediaType.TEXT_PLAIN)
public Response hello(@PathParam("name") String name) {
return Response.ok("Hello, " + name).build();
}
}
上記では、エンドポイントは、アノテーション @Produces が示すように、単純な「テキスト/プレーン」応答を返します。 特に、2つの@Pathアノテーションを持つnameというパラメーターを受け入れるhelloHTTPリソースを公開しています。 また、アノテーション @GET を使用して、それがGETリクエストであることを指定する必要があります。
3. SpringMVCを使用したREST
Spring MVCは、Webアプリケーションを作成するためのSpringFrameworkのモジュールです。 SpringFrameworkにREST機能を追加します。
Spring MVCを使用して、上記と同等のGETリクエストの例を作成しましょう。
@RestController
@RequestMapping("/hello")
public class HelloController {
@GetMapping(value = "/{name}", produces = MediaType.TEXT_PLAIN_VALUE)
public ResponseEntity<?> hello(@PathVariable String name) {
return new ResponseEntity<>("Hello, " + name, HttpStatus.OK);
}
}
コードを見ると、 @RequestMapping は、 helloHTTPリソースを処理していることを示しています。 特に、 @GetMapping アノテーションを使用して、GETリクエストであることを指定しています。 name というパラメーターを受け取り、「text/plain」応答を返します。
4. 違い
JAX-RSは、一連のJavaアノテーションを提供し、それらをプレーンJavaオブジェクトに適用することに依存しています。 実際、これらの注釈は、クライアント/サーバー通信の低レベルの詳細を抽象化するのに役立ちます。 実装を簡素化するために、HTTPリクエストとレスポンスを処理し、コードにバインドするためのアノテーションを提供します。 JAX-RSは単なる仕様であり、使用するには互換性のある実装が必要です。
一方、 Spring MVC は、REST機能を備えた完全なフレームワークです。 JAX-RSと同様に、低レベルの詳細から抽象化するための便利な注釈も提供します。 その主な利点は、 SpringFrameworkエコシステムの一部であることです。 したがって、他のSpringモジュールと同じように依存性注入を使用できます。 さらに、 Spring AOP 、 Spring Data REST 、 SpringSecurityなどの他のコンポーネントと簡単に統合できます。
5. 結論
この簡単な記事では、JAX-RSとSpringMVCの主な違いについて説明しました。
いつものように、この記事のソースコードはGitHubでから入手できます。