1. 概要

この簡単なチュートリアルでは、SpringMVCの@Controllerアノテーションと@RestControllerアノテーションの違いについて説明します。

従来のSpringコントローラーに最初のアノテーションを使用できます。これは非常に長い間フレームワークの一部でした。

Spring 4.0では、RESTful Webサービスの作成を簡素化するために、@RestControllerアノテーションが導入されました。 これは@Controllerと@ResponseBodyを組み合わせた便利なアノテーションであり、コントローラークラスのすべてのリクエスト処理メソッドに@ResponseBodyアノテーションを付ける必要がありません。

2. Spring MVC @Controller

クラシックコントローラーに@Controllerアノテーションを付けることができます。 これは単に@Componentクラスの特殊化であり、クラスパススキャンを通じて実装クラスを自動検出できます。

通常、リクエスト処理メソッドには、@Controller@RequestMappingアノテーションと組み合わせて使用します。

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

@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の注釈を付けました。 このアノテーションにより、戻りオブジェクトを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は必要ありません。

コントローラクラスのすべてのリクエスト処理メソッドは、リターンオブジェクトをHttpResponseに自動的にシリアル化します。

4. 結論

この記事では、SpringFrameworkで利用可能な従来のRESTコントローラーと特殊なRESTコントローラーについて説明しました。

例の完全なソースコードは、GitHubプロジェクトで入手できます。 これはMavenプロジェクトなので、そのままインポートして使用できます。