1. ホーム
  2. spring-mvc

[解決済み] JAX-RSとSpring Restの違いについて

2022-05-08 17:44:26

質問

との違いに戸惑いました。 JAX-RS (まあ、JAX-RSは単なる仕様なので、比較はJerseyで行うべきかもしれませんが)と SpringによるRestfulサービス . ネットでもっと情報を探そうとすると、ますます分からなくなるんです。私の会社は、Restful APIを開発するためにSpring MVCを使用しています。

分かりにくいのは、JAX-RSは、以下の略です。 RESTful Webサービス用Java API Springでもjavaを使ってRESTful Web Servicesを開発しているので、実は違いがよくわからないのです。SpringはJAX-RSの仕様に準拠しているのでしょうか?

今まで知っている限りでは

  1. JAX-RSはブループリント/スペックであり、実装としてJersey、RESTeasyなどがある。

どのように解決するのですか?

JAX-RS

JAX-RSは 仕様 は、Java で REST ウェブサービスを実装するためのものであり、現在は JSR-370 . の一部です。 Java EE技術 で定義されています。 JSR 366 .

ジャージー (GlassFish と Payara に同梱) が JAX-RS のリファレンス実装ですが、その他にも RESTEasy (JBoss EAPとWildFlyに同梱)および アパッチCXF (TomEE および WebSphere に同梱)。

Springフレームワーク

スプリングフレームワーク フルフレームワーク Javaエンタープライズ・アプリケーションを作成することができます。RESTの機能を提供するのは Spring MVC モジュール モデルビューコントローラー の機能)。JAX-RSの実装ではなく、JAX-RS標準のSpringの代替品と見ることができる。

また、Springエコシステムでは 幅広いプロジェクト エンタープライズ・アプリケーションを作成するために、永続性、セキュリティ、ソーシャルネットワークとの統合、バッチ処理などをカバーします。

事例紹介

JAX-RS APIを使用した以下のリソースコントローラを考えてみましょう。

@Path("/greetings")
public class JaxRsController {

    @GET
    @Path("/{name}")
    @Produces(MediaType.TEXT_PLAIN)
    public Response greeting(@PathParam("name") String name) {

        String greeting = "Hello " + name;
        return Response.ok(greeting).build();
    }
}

Spring MVC APIを使った同等の実装は、以下のようになります。

@RestController
@RequestMapping("/greetings")
public class SpringRestController {

    @RequestMapping(method = RequestMethod.GET,
                    value = "/{name}", 
                    produces = MediaType.TEXT_PLAIN_VALUE)
    public ResponseEntity<?> greeting(@PathVariable String name) {

        String greeting = "Hello " + name;
        return new ResponseEntity<>(greeting, HttpStatus.OK);
    }
}

Spring BootとJerseyを使う

Spring Bootでは spring-boot-starter-jersey モジュールを使用すると、Spring MVCの代わりにRESTエンドポイントにJAX-RSプログラミングモデルを使用することができます。これはJersey 2.xでかなりうまく動きます。

Jersey 2.xとSpring Boot 1.4.xを使ったWebアプリケーションの完全な作成例については、以下を参照してください。 回答 .