はじめに
株式会社インプルの奈良です。
Spring Bootのアプリケーションで最も基本的な部分の一つがコントローラーです。
コントローラーは、ユーザーからのリクエストを受け取り、適切なビジネスロジックにリダイレクトする責任を持っています。
この記事では、Spring Bootでのコントローラーの作成やルール、その使い方について解説します。
コントローラー作成におけるルールについて
パッケージの配置について
src/main/java内に専用のパッケージを作成してコントローラーを配置します。
多くの場合、パッケージはcontrollerまたはwebと名付けられます。
また、よくあるパターンとしてはcom.example.controllerというパッケージ名を作成します。com.exampleはプロジェクトの基本的なパッケージで、サブクラスにcontrollerという名前のパッケージを作成し、Controllerを配置します。
src/main/java/com/example/controller/HomeController.java
ファイル名とクラス名の命名規則について
クラス名(または継承するファイル名)は、通常、その機能を反映した名前にControllerという接尾辞をつけます。この際はアッパーキャメルケース(Upper Camel Case)であるべきです。
- HomeController.java
- ProductController.java
- OrderController.java
アノテーションの使用について
Spring Bootでは、クラスレベルで@Controllerまたは@RestControllerアノテーションを使用してコントローラーとしてクラスを明示します。
@RestController
public class HomeController {
// ...
}
※【補足】アノテーションとは
アノテーションを直訳すると「注釈」という意味になります。
Java開発ではアノテーションをコードに注釈として補足を加えることで、プログラムの動作を変更したり、開発時のルールを統一できたり、フレームワークに処理を指示したりできます。
下記のサイトがJavaやSpringで使用するアノテーションをまとめているので、必要に応じて適宜参照するようにしましょう!
メソッドの命名について
他の言語やフレームワークにも言えることですが、コントローラー内のメソッド名は、できる限りその機能や行うアクションを明確に示すものにするべきです。
- public String viewProduct() {…}
- public String createOrder() {…}
- public String updateProfile() {…}
ルーティングの明示について
各メソッドには、HTTPメソッドとパスを明示するアノテーション(@GetMapping ,@PostMapping,@PutMappingなど)を付けます。
@GetMapping("/home")
public String homePage() {
// ...
}
基本的なコントローラーの作成
では、上記で解説したコントローラー作成のルールを踏まえて、実際にコントローラーを作成してみましょう。
Spring Bootでコントローラーを作成するには、クラスに@RestControllerまたは@Controllerアノテーションを追加します。
@RestControllerは、RESTfulなWebサービスを作成する際に使用され、@Controllerは、主にThymeleafやJSPなどのビューと組み合わせて使用されます。
RESTfulなコントローラーの例
@RestController
public class HelloWorldController {
@GetMapping("/hello")
public String helloWorld() {
return "Hello, world!";
}
}
上記のコードは、/helloというエンドポイントにGETリクエストが来た場合、”Hello, world!”という文字列を返します。
MVC型コントローラーの例
@Controller
public class HomeController {
@GetMapping("/home")
public String home(Model model) {
model.addAttribute("message", "Welcome to our website!");
return "home";
}
}
上記のコードは、/homeエンドポイントにアクセスした際にhomeビュー(通常はhome.htmlファイル)を返します。ビューに渡すデータは、Modelオブジェクトを使って設定されます。
パス変数とクエリパラメータ
Spring Bootでは、コントローラーメソッドで簡単にURLのパス変数とクエリパラメータを取得できます。
@GetMapping("/greet/{name}")
public String greet(@PathVariable String name, @RequestParam(required = false) String suffix) {
return "Hello, " + name + (suffix != null ? " " + suffix : "") + "!";
}
上記の例では、/greet/Nara?suffix=Mr.のようなURLに対応しています。
実際の動作説明をすると下記のような形になります。
アノテーション
@PathVariable
- URLのパスから変数を取得する場合に使用します。
- メソッド引数として使用し、アノテーション内でパス変数の名前を指定することができます。
@RequestParam
- URLのクエリパラメータを取得する場合に使用します。
- required属性を用いると、そのクエリパラメータが必須かどうかを指定できます(デフォルトはtrue)。
動作説明
- @GetMapping(“/greet/{name}”): /greetの後ろに続く{name}部分はパス変数です。これを@PathVariableで取得します。
- @PathVariable String name: {name}というパス変数をString型のnameという変数に格納します。
- @RequestParam(required = false) String suffix: クエリパラメータsuffixをオプショナル(required = false)でString型のsuffixという変数に格納します。
このようにして、例えば/greet/Nara?suffix=Mr.というURLに対して、nameはNaraになり、suffixはMr.になります。
それを元に”Hello, Nara Mr.!”という文字列が生成され、レスポンスとして返されます。
まとめ
Spring Bootのコントローラーは、Webアプリケーションで非常に重要な役割を果たします。
また、アノテーションを活用することで、短いコードで非常に多くの機能を実装できます。
初めてSpring Bootを学ぶ人にとって、コントローラーの理解は必須であるため、今回記事としてまとめた内容が何か役に立てば幸いです。
次回の記事はSpring Bootにおけるビューについて解説したいと思います。