Springの@GetMappingアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
生徒
「JavaのSpringフレームワークを使ってWebアプリケーションを作りたいんですが、@GetMappingアノテーションの使い方がよくわからないんです。」
先生
「それなら@GetMappingアノテーションについて詳しく説明するね。このアノテーションを使うと、HTTP GETリクエストに対応するメソッドを簡単に定義できるんだよ。」
生徒
「GETリクエストって具体的に何ですか?」
先生
「GETリクエストは、Webブラウザがサーバーにデータを要求するためのHTTPリクエストの一種だよ。ブラウザのアドレスバーにURLを入力してWebページにアクセスするときも、実はGETリクエストを送っているんだ。」
生徒
「なるほど!じゃあ、@GetMappingを使うとどんな感じになるんですか?」
先生
「よし、実際のコードを見てみよう!」
1. @GetMappingアノテーションとは?
@GetMappingは、Spring MVCで使われるアノテーションの一つです。特に、HTTP GETリクエストを処理するために使用されます。通常、ブラウザからページを取得するときやAPIからデータを取得するときに使われるリクエストです。
例えば、次のようにコントローラークラスを作成して、@GetMappingを利用します。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, Spring!";
}
}
実行結果例
GET /hello
=> Hello, Spring!
この例では、/helloというURLにアクセスすると、「Hello, Spring!」というメッセージが表示されます。
2. @GetMappingでパラメータを受け取る方法
@GetMappingでは、URLにパラメータを含めてデータを取得することも可能です。たとえば、ユーザーの名前を入力して、その名前に応じたメッセージを返すように設定できます。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetingController {
@GetMapping("/greet")
public String greetUser(@RequestParam String name) {
return "Hello, " + name + "!";
}
}
実行結果例
GET /greet?name=Alice
=> Hello, Alice!
このように@RequestParamを使うことで、クエリパラメータを受け取り、それを使って動的なレスポンスを返すことができます。
3. @GetMappingでパス変数を使う方法
Springでは、@PathVariableを使ってURLパスに含まれる変数を受け取ることも可能です。これにより、より直感的なURL設計ができます。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@GetMapping("/users/{id}")
public String getUserById(@PathVariable int id) {
return "User ID: " + id;
}
}
実行結果例
GET /users/123
=> User ID: 123
このように、URLパスに/users/123のようにIDを埋め込んでリクエストすると、そのIDを取得して処理できます。
Spring FrameworkやThymeleafを使った Webアプリ開発の全体像をやさしく理解したい人には、 この入門書が定番です。
Spring Framework超入門をAmazonで見る※ Amazon広告リンク
4. @GetMappingの応用:JSONレスポンスの返却
Springでは、@GetMappingを使ってJSON形式のレスポンスを返すこともできます。これにより、フロントエンドとのデータ連携がしやすくなります。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
public class JsonController {
@GetMapping("/json")
public Map<String, String> getJson() {
return Map.of("message", "Hello, JSON!", "status", "success");
}
}
実行結果例
GET /json
=> {"message": "Hello, JSON!", "status": "success"}
これにより、APIとしてデータをやり取りする際にも@GetMappingが便利に使えます。
5. @GetMappingの活用例
@GetMappingは、シンプルなWebアプリケーションやAPIのエンドポイントを定義する際に非常に便利なアノテーションです。HTTP GETリクエストに対して迅速に対応するための方法として覚えておきましょう。
以下のように複数のエンドポイントをまとめて定義することも可能です。
@RestController
public class MultiEndpointController {
@GetMapping("/home")
public String home() {
return "Welcome to Home!";
}
@GetMapping("/about")
public String about() {
return "About Us Page";
}
}
実行結果例
GET /home
=> Welcome to Home!
GET /about
=> About Us Page
このように複数のエンドポイントを整理することで、コードの見通しが良くなり、メンテナンスも簡単になります。
6. クラスレベルの@RequestMappingと@GetMappingの組み合わせ
クラスに@RequestMappingで共通のURLプレフィックスを付け、各メソッドに@GetMappingでサブパスを付けると、エンドポイント設計がシンプルになります。Spring Bootでの実装例を見てみましょう。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/v1/users")
public class UserApiController {
@GetMapping
public String list() {
return "Users Index";
}
@GetMapping("/{id}")
public String show(@PathVariable Long id) {
return "User Detail: " + id;
}
}
実行結果例
GET /api/v1/users
=> Users Index
GET /api/v1/users/10
=> User Detail: 10
7. @RequestParamの便利機能(required・defaultValue・複数値・Optional)
@RequestParamは必須制御やデフォルト値、配列・リストの受け取りに対応しています。未指定時の扱いを決めておくと初心者でも扱いやすいAPIになります。
import java.util.List;
import java.util.Optional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SearchController {
// 必須ではないキーワード(未指定なら空文字)、ページ番号はデフォルト1
@GetMapping("/search")
public String search(
@RequestParam(name = "q", required = false, defaultValue = "") String keyword,
@RequestParam(name = "page", defaultValue = "1") int page,
@RequestParam(name = "tag", required = false) List<String> tags // ?tag=a&tag=b
) {
return "q=" + keyword + ", page=" + page + ", tags=" + tags;
}
// Optionalで未指定を明示的に扱う
@GetMapping("/search/optional")
public String searchOptional(@RequestParam Optional<String> q) {
return q.map(v -> "q=" + v).orElse("q is empty");
}
}
実行結果例
GET /search?q=spring&page=2&tag=boot&tag=java
=> q=spring, page=2, tags=[boot, java]
GET /search/optional
=> q is empty
8. 条件付きマッピング:produces・params・headersでルートを出し分け
@GetMappingは、返却のコンテンツタイプやクエリパラメータ・ヘッダーの有無でルートを切り替えられます。クライアントのAcceptヘッダーに合わせたコンテンツ交渉も可能です。
import java.util.Map;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ReportController {
// Accept: text/plain のときに選ばれる
@GetMapping(value = "/report", produces = MediaType.TEXT_PLAIN_VALUE)
public String reportText() {
return "report: plain text";
}
// Accept: application/json のときに選ばれる
@GetMapping(value = "/report", produces = MediaType.APPLICATION_JSON_VALUE)
public Map<String, Object> reportJson() {
return Map.of("type", "json", "result", "ok");
}
// ?preview=true が付いているときだけマッチ
@GetMapping(value = "/feature", params = "preview=true")
public String preview() {
return "Preview Mode";
}
// カスタムヘッダーがあるときだけマッチ
@GetMapping(value = "/secure", headers = "X-API-KEY")
public String secure(@RequestHeader("X-API-KEY") String apiKey) {
return "Authorized with key: " + apiKey;
}
}
実行結果例
GET /report (Accept: text/plain)
=> report: plain text
GET /report (Accept: application/json)
=> {"type":"json","result":"ok"}
GET /feature?preview=true
=> Preview Mode
GET /secure (X-API-KEY: abc123)
=> Authorized with key: abc123
まとめ
ここまで、Springフレームワークの@GetMappingアノテーションについて、基本的な使い方から応用的な活用方法まで解説しました。@GetMappingは、HTTP GETリクエストに対応したメソッドを簡単に定義できる強力なツールです。このアノテーションを使うことで、効率的にAPIを構築し、Webアプリケーションの機能を拡張することができます。
まず、単純な文字列のレスポンスから始めて、次に@RequestParamを用いたクエリパラメータの受け取り方法、@PathVariableを利用した動的なURLパスの構築、そしてJSON形式のレスポンスを返す方法について紹介しました。これらのテクニックを理解することで、柔軟でパワフルなAPIを構築することができます。
Springの@GetMappingアノテーションは、シンプルで直感的なHTTP GETリクエストの処理を可能にするため、これからWebアプリケーション開発に取り組む方にとって必須の知識です。また、他のHTTPメソッド(@PostMappingや@PutMappingなど)との組み合わせにより、より多機能なアプリケーションを構築することもできます。引き続きSpringの豊富な機能を活用し、実際のプロジェクトに役立ててください。
以下は、今回の内容をまとめたサンプルコードです。実際の開発においては、これをベースにして多様なHTTPリクエストに対応できるように発展させてみましょう。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
public class CombinedController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, Spring Framework!";
}
@GetMapping("/greet")
public String greetUser(@RequestParam String name) {
return "Hello, " + name + "!";
}
@GetMapping("/users/{id}")
public String getUserById(@PathVariable int id) {
return "User ID: " + id;
}
@GetMapping("/json")
public Map<String, String> getJson() {
return Map.of("message", "JSON Response", "status", "OK");
}
}
実行結果例
GET /hello
=> Hello, Spring Framework!
GET /greet?name=John
=> Hello, John!
GET /users/789
=> User ID: 789
GET /json
=> {"message": "JSON Response", "status": "OK"}
このサンプルコードでは、@GetMappingを使った複数のエンドポイントが定義されています。URLのパスやクエリパラメータを活用して、動的なレスポンスを返す方法が学べましたね。
生徒
「@GetMappingアノテーションについて、だいぶ理解できました!シンプルなエンドポイントからパラメータを使ったAPIまで色々できるんですね。」
先生
「その通り!@GetMappingを使うことで、GETリクエストに簡単に対応できるんだ。パラメータの受け渡しやJSONレスポンスも覚えたので、Web APIの基礎はバッチリだね。」
生徒
「これを応用すれば、ユーザー情報を取得したり、色々なデータを返すAPIも作れそうです!」
先生
「その意気だよ!次のステップとして、POSTリクエストに対応する@PostMappingや、データの更新・削除に使える@PutMappingと@DeleteMappingも学んでいこう。」
生徒
「楽しみです!また教えてください!」