Springの@Controllerアノテーションと@RestControllerアノテーション

Spring @Controllerおよび@RestControllerアノテーション

1. 概要

このクイックチュートリアルでは、Spring MVCの@Controllerアノテーションと@RestControllerアノテーションの違いについて説明します。

最初の注釈は、従来のSpringコントローラーに使用され、非常に長い間フレームワークの一部でした。

@RestControllerアノテーションは、RESTfulWebサービスの作成を簡素化するためにSpring4.0で導入されました。 It’s a convenience annotation that combines @Controller and @ResponseBody –コントローラークラスのすべてのリクエスト処理メソッドに@ResponseBodyアノテーションを付ける必要がなくなります。

参考文献:

Spring RequestMapping

Spring @RequestMapping-基本的な例、@ RequestParam、@ PathVariable、ヘッダーマッピング

Spring @RequestParamアノテーション

Springの@RequestParamアノテーションの詳細ガイド

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. 結論

この記事では、Spring Frameworkで利用可能なクラシックおよび特殊なRESTコントローラーを紹介しました。

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