コントローラーの基本
コントローラーとは
Springのコントローラーは、HTTPリクエスト&レスポンスを返すコンポーネントクラスです。リクエストではHTTPメソッド、URIマッピング、パラメータなどを指定し、JSONやXMLなどのさまざまなデータフォーマットでレスポンスできます。
クラス名
コントローラークラスは xxxxController で作成し、命名規則はパスカルケースとします。
public class SampleController {
}
アノテーションで簡略化
Springのコントローラーはさまざまな機能がありますが、アノテーションを使うと、HTTPリクエストに関するプログラムを簡略化できます。
@Controller
public class SampleController {
@GetMapping("/hello")
public String index(@RequestParam String name) {
//処理
}
}
@Controller
@Controllerを利用すると、Springのコントローラーとして動作します。 HTMLテンプレートのビュー(JSP、Thymeleafなど)を生成して、クライアントにレスポンスします。
コントローラーの定義方法
@Controller アノテーションは、コントローラークラス全体に定義します。このクラスは基本的にHTMLテンプレートをレスポンスするのに利用します。
@Controller
public class コントローラー名 {
}
@RestController
@RestController アノテーションは、@Controller と @ResponseBody を組み合わせたアノテーションで、JSON、XMLなどのデータをレスポンスします。
@RestController
public class コントローラー名 {
}
マッピング
マッピング(Mapping) は、URLとHTTPリクエストメソッドに対応してコントローラのメソッドを実行します。この仕組みはRoutingともいい、Springではメソッドにアノテーションを定義します。
アノテーションの種類
Spring MVCのマッピングは、以下のようなHTTP/2のリクエストメソッドに対応したアノテーションが用意されています。
HTTPリクエスト | アノテーション |
---|---|
GET | @GetMapping |
POST | @PostMapping |
PUT | @PutMapping |
DELETE | @DeleteMapping |
PATCH | @PatchMapping |
REQUEST | @RequestMapping |
@GetMapping
GETリクエストのマッピングは、@GetMappingにURLパターンを定義します。URLパターンは、WebアプリケーションのURLからのパスです。
@GetMapping("URLパターン")
public String メソッド() {
//処理
}
パラメーター
@RequestParam
@RequestParamは、HTTPリクエストのクエリパラメーターをメソッドの引数で取得します。
public String bye(@RequestParam String 引数) {
//引数を利用できる
}
@RequestParam() の記述で、各パラメーターをカスタマイズできます。
public String bye(@RequestParam(name = "キー", required = false) String 引数) {
}
- name:キー
- required:入力必須
コントローラー作成
ファイル構成
controllers/
└── RestSampleController.java
ルーティング
URLパターン | コントローラー | アクションメソッド | リクエストメソッド | パラメータ |
---|---|---|---|---|
/hello | RestSampleController | index() | GET | なし |
/bye | RestSampleController | bye() | GET | 文字列 |
/users | RestSampleController | getUserId() | GET | 整数 |
controllersパッケージ作成
コントローラーファイルを管理しやすくするために、「src/main/com/example/」に「controllers」パッケージを作成しておきます。
フォルダ表示

パッケージ表示(Java Projects)

コントローラークラス作成
クラスファイル作成
「controllers/」に「RestSampleController」を作成します。
クラスファイル定義
「RestSampleController」クラスを定義します。
controllers/RestSampleController.java
package com.example.demo.controllers;
public class RestSampleController {
}
@RestController追加
コントローラークラスの前に、@RestControllerを追加します。
- 「@Rest」と入力してスニペットを利用すると便利です
@RestController アノテーションを追加できました。
controllers/RestSampleController.java
package com.example.demo.controllers;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RestSampleController {
}
- org.springframework.web.bind.annotation.RestControllerも自動インポートされます。
アクションメソッド追加
GETメソッド追加
「method」と入力して、「GetMapping」を選択します。

アクションメソッド(GETマッピング)が自動入力されます。
controllers/RestSampleController.java
package com.example.demo.controllers;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RestSampleController {
@GetMapping(value="path")
public SomeData getMethodName(@RequestParam String param) {
return new SomeData();
}
}
アクションメソッド定義
アクションメソッド名を「index」として、引数を削除します。
controllers/RestSampleController.java
@RestController
public class RestSampleController {
@GetMapping(value="path")
//メソッド修正
public String index() {
return new SomeData();
}
}
レスポンス処理
任意の文字列をレスポンスします。
controllers/RestSampleController.java
@GetMapping("/hello")
public String index() {
//文字列をレスポンス
return "This is Sample Controller!!";
}
マッピング修正
@GetMapping のvalueプロパティに「/hello」指定して、マッピングします。
@RestController
public class RestSampleController {
//URLマッピング
@GetMapping(value = "/hello")
public String index() {
return "This is Sample Controller!!";
}
}
ブラウザで確認
http://localhost:8080/hello にアクセスして、レスポンスした文字列が表示されるか確認してみましょう。
パラメータ取得
URLのクエリパラメーターparamの値を取得します。
http://localhost:8080/bye?param=Tokyo
nameパラメータを取得し、メッセージをレスポンスします。
controllers/RestSampleController.java
@GetMapping(value = "/bye")
public String bye(@RequestParam String param) {
String message = "Bye!" + param;
return message;
}
結果

@RequestParamでエラーになる場合
@RequestParamでエラーに場合、RequestParamアノテーションがインポートされていないのが原因です。
クイックフィックスを使ってインポートします。
RequestParamアノテーションがインポートされました。
import org.springframework.web.bind.annotation.RequestParam;
パラメータのカスタマイズ
URLのクエリパラメーターのキーをnameとし、パラメータは任意とします。
http://localhost:8080/bye?param=Tokyo
@RequestParam() のパラメーターのキーを「name」、入力必須「なし」にします。
public String bye(@RequestParam(name = "name", required = false) String param) {
String message = "Bye!" + param;
return message;
}
パラメータのキーは「name」となり、パラメータがなくても動作します。
結果(パラメーターあり)

結果(パラメーターなし)

@PathVariable
@PathVariable アノテーションは、HTTPリクエストのURLパスをメソッドの引数として取得します。
@GetMapping("/users/{userId}")
public String getUserById(@PathVariable Long userId) {
String message = "User id is " + userId + "!";
return message;
}
ブラウザ確認
URLパス「/users/」に任意の数値を指定して結果を確認してみましょう。
http://localhost:8080/users/3
結果

トップページ
ファイル構成
controllers/
└── HomeController.java
ルーティング
URLパターン | コントローラー | アクションメソッド | リクエストメソッド |
---|---|---|---|
/ | HomeController | index | GET |
HomeControllerクラス作成
「controllers/」に「HomeController」を作成します。
controllers/HomeController.java
package com.example.demo.controllers;
import org.springframework.stereotype.Controller;
@Controller
public class HomeController {
}
アクションメソッド追加
index() メソッドを追加し、 @GetMappingで「 / 」をマッピングします。
controllers/HomeController.java
@Controller
public class HomeController {
@GetMapping("/")
public String index() {
return "This is Top Page";
}
}
ブラウザで確認
http://localhost:8080 (Webルート)にアクセスすると、エラーになります。@Controller はHTMLテンプレートをレスポンスする仕様で、文字列を直接レスポンスできません。

@ResponseBody
@Controller は基本的にHTMLをレスポンスするため、文字列を強制的にレスポンスするには @ResponseBody の定義が必要です。
controllers/HomeController.java
@GetMapping("/")
@ResponseBody
public String index() {
return "This is Top Page";
}
コンパイルエラーの場合
アノテーションでエラーになる場合は、対象のクラスをインポートする必要があります。これを対処するには、エラー箇所をマウスオーバーし、【クイックフィックス】をクリックします。

対象のクラスをインポートします。
ブラウザ確認
トップページにアクセスすると、「HomeController」のindex() のレスポンスが表示されます。
