Springの@Controllerおよび@RestControllerの注釈
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プロジェクトなので、そのままインポートして使用できます。