【超入門】Spring BootのGETとPOSTをやさしく解説!使い分けと実装がこれだけで分かる
生徒
「Spring BootでGETとPOSTの違いは知っているつもりなんですが、実際のサービスだとどう使い分ければいいのかイメージできません。」
先生
「イメージがつかみにくいとよく言われますね。簡単に言うと、読むときはGET、何かを送ってサーバーの状態を変えるときはPOSTです。たとえば、ネットショッピングなら、商品を見ているときはGET、注文ボタンを押して情報を送るときはPOSTですね。」
生徒
「なるほど!では、プロフィール更新みたいに『入力フォームを開く→保存』の場合はどうですか?フォームを開くのはGETで、保存してDBに書き込むのはPOST、という感じですか?」
先生
「その通り!フォーム表示はGETで、送信して更新処理を行うのがPOSTです。Spring Bootだと@GetMappingと@PostMappingを使い分けるだけなので、実装も覚えやすいですよ。」
1. GETとPOSTの違いとは?
まずは「何をするときにどちらを使うか」をイメージで押さえましょう。GETは
データを取りに行く(読む)ためのリクエスト、POSTは
データを送り込む(書く)ためのリクエストです。日常の例で言うと、
メニューを見るのがGET、注文票を渡すのがPOSTという感覚です。
GETメソッドはURLに条件(クエリ)を付けてサーバーに「見せて」と頼みます。 ページ閲覧や検索に向いており、基本的にサーバーの中身を変えません(安全・冪等)。 例えば次のようにURLだけで動きます。
# 例:ユーザー名で検索(URLに条件を付ける)
curl "http://localhost:8080/users?keyword=taro"
- URLに条件が見えるので、ブックマークや共有が簡単。
- ブラウザやプロキシのキャッシュが効きやすい。
- URL長に上限があるため、送れるデータは少量が前提。
POSTメソッドはリクエストの本文(ボディ)にデータを入れて送ります。 登録・更新・ログインなど、サーバーの状態が変わる処理に使います。 たくさんの項目やファイルも送れ、URLはすっきりしたままです。
# 例:新規ユーザーを登録(本文にデータを入れる)
curl -X POST "http://localhost:8080/register" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=taro&email=taro@example.com"
- 本文に載せるため大量のデータを扱える(フォーム送信に最適)。
- URLに値が出ないので、情報が露出しにくい(ただしHTTPSは必須)。
- 再送で重複登録を生みやすいので、後述の対策(トークン等)を考えるのが定石。
- 読むだけ(検索・一覧・詳細)→
GET - サーバーの中身が変わる(登録・更新・削除・ログイン)→
POST - URLに条件を残して再現したい(共有・履歴)→
GET - 入力項目が多い・ファイルを送る →
POST
要点は「GET=取得、POST=送信」。まずはこの軸で迷わず選べれば十分です。
以降の実装では、@GetMappingと@PostMappingに当てはめるだけで、
同じ考え方のままコードへ落とし込めます。
2. Spring BootでのGETリクエスト: @GetMapping
@GetMappingは「ページを見る・情報を取りに行く」ための入り口です。基本の流れは
URLに条件を付ける → コントローラで受け取る → 画面(ビュー)に渡すの3ステップ。
まずはクエリパラメータ(?name=...の形)を受け取って、画面にメッセージを表示する超シンプルな例から始めましょう。
<!-- コントローラー: HelloController.java -->
@Controller
public class HelloController {
// ① クエリパラメータを受け取る例(/hello?name=Java)
@GetMapping("/hello")
public String hello(
@RequestParam(name = "name", defaultValue = "World") String name,
Model model) {
model.addAttribute("message", "Hello, " + name + "!");
return "hello"; // hello.html を表示
}
}
上の例では、/hello?name=Javaとアクセスすると「Hello, Java!」が表示されます。
defaultValueを指定しているので、nameが無いときは自動的に「World」を使います。
画面テンプレート(Thymeleaf等)ではmessageをそのまま埋め込めばOKです。
- クエリパラメータ:
/search?keyword=taro→@RequestParam("keyword") - パス変数:
/users/10→@PathVariable Long id(URLの一部を変数として受け取る) - 固定ページ:条件なしで表示する案内ページなど → 引数なしの
@GetMapping
<!-- コントローラー: UserViewController.java -->
@Controller
@RequestMapping("/users")
public class UserViewController {
// ② パス変数を受け取る例(/users/10)
@GetMapping("/{id}")
public String detail(@PathVariable("id") Long id, Model model) {
// 本来はサービスやリポジトリからユーザー情報を取得
model.addAttribute("message", "ユーザーID: " + id + " の詳細ページです。");
return "user-detail"; // user-detail.html
}
}
/users/10のようにURLの一部を変数にすると、「一覧→詳細」の画面遷移が作りやすくなります。
まずは「IDを受け取って文字を表示する」だけでも十分な練習になります。
- 必須・任意の切り替え:
@RequestParam(required = false)で任意にできます。未指定の場合はnullやdefaultValueを活用。 - URLで再現しやすい:検索条件をURLに残せるので、ブックマークや共有に向いています。
- サーバー変更はしない:GETは取得専用。登録や更新は次章の
@PostMappingを使います。
# クエリパラメータで名前を渡す
curl "http://localhost:8080/hello?name=Spring"
# パス変数でIDを渡す
curl "http://localhost:8080/users/10"
まずは「URLに条件を付け→コントローラで受け取り→ビューへ渡す」だけを何度か繰り返してみてください。 Spring BootのGETは、書くコードが少なく挙動も分かりやすいので、最初の一歩に最適です。
将来を見据えて、+αのスキルを身につけたい方へ
JavaやLinuxを学んでいても、「このままで市場価値は上がるのか」 「キャリアの選択肢を広げたい」と感じる方は少なくありません。
AIを学ぶならアイデミープレミアム3. Spring BootでのPOSTリクエスト: @PostMapping
フォームなどのデータをサーバーに送信する際には、@PostMappingを使います。以下の例では、ユーザー名とメールアドレスを送信し、サーバー側で受け取るコードを示します。
<!-- コントローラー: UserController.java -->
@Controller
public class UserController {
@PostMapping("/register")
public String register(@RequestParam String username, @RequestParam String email, Model model) {
model.addAttribute("message", "User " + username + " with email " + email + " registered successfully.");
return "register";
}
}
このコードに対して、フォームからPOSTリクエストを送信すると、ユーザー名とメールアドレスを受け取ることができます。
4. GETとPOSTの使い分け
GETとPOSTの使い分けは、基本的に次のルールに従います。
- データの取得には
GETを使います。データを取得するだけで、サーバーの状態を変更しない場合に使います。 - データの送信には
POSTを使います。フォームデータやアップロードデータをサーバーに送る場合、またはサーバーの状態を変更する操作(例: データの登録や更新)に使います。
例えば、ユーザーの検索はGETリクエストで行い、ユーザーの登録や更新はPOSTリクエストで行うのが一般的です。
5. GETとPOSTの実際の使い方の例
最後に、GETとPOSTを使ったフォームの実際の例を見てみましょう。
GETリクエストのフォーム例
<!-- HTML: getForm.html -->
<form action="/hello" method="get">
<input type="text" name="name" placeholder="Enter your name" />
<button type="submit">Say Hello</button>
</form>
POSTリクエストのフォーム例
<!-- HTML: postForm.html -->
<form action="/register" method="post">
<input type="text" name="username" placeholder="Enter your username" />
<input type="email" name="email" placeholder="Enter your email" />
<button type="submit">Register</button>
</form>
これらのフォームを使えば、GETとPOSTの使い方の違いが実際に確認できます。GETフォームは主に検索やクエリのために、POSTフォームはデータ送信のために使用します。
6. まとめ
この記事では、Spring Bootを使ったGETリクエストとPOSTリクエストの基本的な使い方について詳しく解説しました。それぞれのHTTPメソッドの特徴や用途、具体的な実装例を通じて、初心者でも理解しやすいように構成しました。
GETリクエストは、主にデータをサーバーから取得するために使用され、URLにパラメータを付加してリクエストを送信します。一方、POSTリクエストは、サーバーにデータを送信するために使用され、フォームデータやファイルの送信に適しています。これらの違いを理解することで、正しいHTTPメソッドを適切な状況で使用できるようになります。
また、Spring Bootでの実装方法として、@GetMappingと@PostMappingを使用する方法を紹介しました。それぞれのアノテーションを使うことで、GETやPOSTのリクエストを簡単に処理できます。特に、GETリクエストではURLからクエリパラメータを受け取り、POSTリクエストではフォームデータを受け取る実装例を示しました。
以下に、この記事の内容を整理したサンプルコードを掲載します。GETとPOSTの使い方の違いをさらに深く理解するために活用してください。
<!-- GETリクエスト: HTML -->
<form action="/hello" method="get">
<input type="text" name="name" placeholder="名前を入力" />
<button type="submit">送信</button>
</form>
<!-- POSTリクエスト: HTML -->
<form action="/register" method="post">
<input type="text" name="username" placeholder="ユーザー名" />
<input type="email" name="email" placeholder="メールアドレス" />
<button type="submit">登録</button>
</form>
<!-- GETリクエスト: コントローラー -->
@GetMapping("/hello")
public String hello(@RequestParam(name = "name", defaultValue = "ゲスト") String name, Model model) {
model.addAttribute("message", "こんにちは、" + name + "さん!");
return "hello";
}
<!-- POSTリクエスト: コントローラー -->
@PostMapping("/register")
public String register(@RequestParam String username, @RequestParam String email, Model model) {
model.addAttribute("message", username + "さんの登録が完了しました(メール: " + email + ")。");
return "register";
}
このように、GETリクエストではデータの取得、POSTリクエストではデータの送信といった用途に応じて使い分けることが重要です。また、GETリクエストはURLにデータを含めるため公開性が高い一方、POSTリクエストはデータがリクエストボディに含まれるため、よりセキュアな用途に向いています。
この記事を参考に、GETとPOSTの使い方を理解し、実際のプロジェクトで活用してみてください。Spring Bootの強力なアノテーション機能を使えば、効率的なリクエスト処理が可能になります。
生徒
「GETとPOSTの違いがよくわかりました!GETはデータを取得するため、POSTはデータを送信するためなんですね。」
先生
「その通りです。それぞれのHTTPメソッドの役割を理解することが、ウェブアプリケーション開発の基礎となります。」
生徒
「Spring Bootでの実装も簡単ですね。アノテーションを使うだけでリクエストを処理できるのが便利です。」
先生
「はい。GETとPOSTを使い分けることで、適切なリクエスト処理を実現できます。次回はPUTやDELETEといった他のHTTPメソッドについても学んでみましょう。」
生徒
「ぜひ学びたいです!ウェブアプリケーション開発がもっと楽しくなりそうです。」
この記事を読んだ人からの質問
プログラミング初心者からのよくある疑問/質問を解決します
GETリクエストとPOSTリクエストの違いは何ですか?
GETリクエストはデータを取得するために使用され、URLにパラメータを付けて送信します。一方、POSTリクエストはデータを送信するために使われ、フォームデータなどをリクエストボディに含めて送信します。
Spring BootでGETリクエストを処理する方法を教えてください。
Spring Bootでは、@GetMappingを使用してGETリクエストを処理します。例えば、URLからクエリパラメータを受け取る場合、@RequestParamを使用します。
POSTリクエストをSpring Bootで処理するにはどうすればよいですか?
POSTリクエストを処理するには、@PostMappingを使用します。フォームデータやファイルの送信を受け取る際に便利です。
GETとPOSTの使い分けはどのように行いますか?
基本的には、データを取得する場合はGETを、データをサーバーに送信する場合はPOSTを使用します。検索機能はGET、フォームデータの登録はPOSTを使うのが一般的です。
GETリクエストのデータ量には制限がありますか?
はい、GETリクエストではURLにパラメータを付加するため、ブラウザやサーバーによる制限があります。通常は2048文字以内に収めることを推奨します。
POSTリクエストはどのような場合に使用しますか?
POSTリクエストは、フォームデータやファイルをサーバーに送信する場合、またはデータの作成・更新など、サーバーの状態を変更する操作で使用します。
Spring BootでフォームをGETリクエストとして送信する方法を教えてください。
フォームにmethod="get"を設定することで、フォームデータをGETリクエストとして送信できます。Spring Bootのコントローラー側では、@GetMappingで処理します。
フォームをPOSTリクエストとして送信する際、データをどのように受け取りますか?
フォームのデータは@RequestParamを使用してコントローラーで受け取ります。データを処理した後、ビューに結果を返すことができます。
Spring BootでGETとPOSTの実際の使い方を教えてください。
GETリクエストでは検索機能やURLパラメータの取得に使用し、POSTリクエストではフォームデータの送信やサーバーの状態変更に使用します。@GetMappingと@PostMappingを活用してください。
Spring BootでGETとPOSTを効率的に使い分けるコツは何ですか?
GETはリード操作(データの読み取り)、POSTはライト操作(データの書き込み)に使用するのが一般的です。また、GETはURLの構造が分かりやすいので、データ取得のリクエストに適しています。
Spring FrameworkやThymeleafを使った Webアプリ開発の全体像をやさしく理解したい人には、 この入門書が定番です。
Spring Framework超入門をAmazonで見る※ Amazonアソシエイト・プログラムを利用しています