1.概要

このクイックチュートリアルでは、Spring MVCの

@ Controller

アノテーションと

@ RestController

アノテーションの違いについて説明します。

最初のアノテーションは伝統的なSpringコントローラのために使われていて、とても長い間フレームワークの一部でした。


@ RestController

アノテーションは、RESTful Webサービスの作成を簡単にするためにSpring 4.0で導入されました。

これは

@ Controller



@ ResponseBody


を組み合わせた便利なアノテーションです。これにより、コントローラークラスのすべてのリクエスト処理メソッドに

@ ResponseBody

アノテーションを付ける必要がなくなります。

2. Spring MVC

@ Controller

古典的なコントローラは

@ Controller

アノテーションでアノテーションを付けることができます。

これは単に

@ Component

クラスの特殊化であり、クラスパススキャンによって実装クラスを自動検出することを可能にします。


@ Controller

は通常、リクエスト処理メソッドで使用される

@ RequestMapping

アノテーションと組み合わせて使用​​されます。

Spring MVCコントローラの簡単な例を見てみましょう。

@Controller
@RequestMapping("books")
public class SimpleBookController {

    @GetMapping("/{id}", produces = "application/json")
    public @ResponseBody Book getBook(@PathVariable int id) {
        return findBookById(id);
    }

    private Book findBookById(int id) {
       //...
    }
}

リクエスト処理メソッドには、

@ ResponseBody

という注釈が付けられています。このアノテーションはreturnオブジェクトの

HttpResponse

への自動シリアライゼーションを可能にします。

3. Spring MVC

@ RestController


@ RestController

はコントローラの特殊バージョンです。これには

@ Controller

および

@ ResponseBody

アノテーションが含まれているため、コントローラーの実装が簡単になります。

@RestController
@RequestMapping("books-rest")
public class SimpleBookRestController {

    @GetMapping("/{id}", produces = "application/json")
    public Book getBook(@PathVariable int id) {
        return findBookById(id);
    }

    private Book findBookById(int id) {
       //...
    }
}

  • コントローラーには

    @ RestController

    アノテーションが付けられているため、

    @ ResponseBody

    は必須ではありません。**

コントローラクラスのすべてのリクエスト処理メソッドは自動的にreturnオブジェクトを

HttpResponse

にシリアライズします。

4.まとめ

この記事では、Spring Frameworkで利用可能な古典的で特殊なRESTコントローラーを見ました。

この例の完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/spring-mvc-java[the GitHub project]にあります。これはMavenプロジェクトなので、そのままインポートして使用することができます。