Spring Bootの@RequestParamの使い方を解説!初心者でもわかるGETリクエストのパラメータ取得
生徒
「Spring BootでURLパラメータを受け取る方法を知りたいんですが、どうすればいいんでしょうか?」
先生
「Spring Bootでは@RequestParamアノテーションを使って、簡単にURLパラメータを取得できますよ。」
生徒
「具体的にどんな風に使うんですか?」
先生
「それでは、基本の使い方を説明しましょう。」
1. @RequestParamとは?
Spring Bootの@RequestParamは、URLのクエリパラメータを取得するためのアノテーションです。ブラウザのアドレスバーに「?name=太郎」のように付けて送られてくる値を、コントローラの引数として受け取り、画面表示や処理に利用できます。
「URLの後ろに付いている追加情報を、Javaのメソッドの引数として自動で渡してくれる仕組み」とイメージすると分かりやすいです。フォームから送信された値や、検索画面の条件、ページ番号など、GETリクエストで渡したい情報を簡単に受け取ることができます。
例)http://localhost:8080/greet?name=太郎
上記のようなURLでアクセスすると、nameというクエリパラメータに「太郎」という文字列が入っています。@RequestParamを使うと、このnameの値をそのままメソッドの引数として受け取り、「ようこそ、太郎さん」のようなメッセージを表示できるようになります。
このように、@RequestParamを使えば、GETリクエストで送信されたURLパラメータを、特別な処理を書かなくても直接取得できるため、Spring BootでのWebアプリ開発がぐっと楽になります。
2. @RequestParamの基本的な使い方
まずは、基本的な@RequestParamの使い方を見てみましょう。以下の例では、ユーザーの名前をURLから取得して、挨拶メッセージとして表示します。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class GreetingController {
@GetMapping("/greet")
public String greet(@RequestParam(defaultValue = "ゲスト") String name, Model model) {
model.addAttribute("name", name);
return "greet";
}
}
この例では、greetメソッドで@RequestParamを使ってnameパラメータを受け取っています。もしURLに?name=太郎を指定した場合、その値が取得され、表示されます。
また、パラメータが指定されていない場合は、defaultValueで設定された「ゲスト」が表示される仕組みです。
3. defaultValueの活用例
@RequestParamのdefaultValue属性を使うことで、パラメータが省略された場合に表示する値をあらかじめ設定できます。これにより、ユーザーが入力を省略した場合の対応が簡単になります。
例えば、nameパラメータが空でも「ゲスト」として表示されるため、常にデフォルトの値が使われてエラーが発生しにくいのが特徴です。
4. @RequestParamを使ったページの表示
次に、@RequestParamを使って実際にページでデータを表示する例を見てみましょう。以下のHTMLコードは、コントローラから渡された名前の値を表示します。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Greeting Page</title>
</head>
<body>
<h1>ようこそ、<span th:text="${name}">ゲスト</span>さん!</h1>
</body>
</html>
ここでは、th:textを使って、コントローラから受け取ったnameパラメータの値を表示しています。URLに?name=太郎を付けてアクセスすると「ようこそ、太郎さん!」と表示されます。
5. 複数のパラメータにdefaultValueを設定する例
@RequestParamを使って複数のパラメータを取得し、それぞれにdefaultValueを設定することも可能です。次の例では、検索機能を実装して、keywordとcategoryの値をURLから取得します。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class SearchController {
@GetMapping("/search")
public String search(
@RequestParam(defaultValue = "") String keyword,
@RequestParam(defaultValue = "すべて") String category,
Model model) {
model.addAttribute("keyword", keyword);
model.addAttribute("category", category);
return "search";
}
}
このように、URLに?keyword=Java&category=プログラミングのように指定すると、keywordとcategoryの値をそれぞれ取得し、表示できます。
6. 実際に動作を確認しよう
Spring Bootアプリケーションを起動し、ブラウザでhttp://localhost:8080/greet?name=太郎にアクセスすることで「ようこそ、太郎さん!」と表示されることを確認できます。URLのパラメータがない場合は、デフォルト値の「ゲスト」が表示されます。
7. @RequestParamの主な属性(name/value・required・defaultValue・Optional)
@RequestParamには、パラメータ名を指定するname(またはvalue)、必須かどうかを制御するrequired、省略時の値を与えるdefaultValueなどの属性があります。未指定時はrequired=trueのため、値が来ないと400エラーになります。未入力を許容したい場合はrequired=falseやdefaultValue、あるいはOptional<T>で受けます。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Optional;
@Controller
public class ProfileController {
@GetMapping("/profile")
public String profile(
@RequestParam(name = "user", required = true) String username,
@RequestParam(name = "age", required = false) Integer age, // null許容のラッパ型
@RequestParam(name = "lang", defaultValue = "ja") String lang, // 省略時は"ja"
@RequestParam(name = "nick") Optional<String> nickname, // Optionalで任意入力
Model model) {
model.addAttribute("username", username);
model.addAttribute("age", age);
model.addAttribute("lang", lang);
model.addAttribute("nickname", nickname.orElse("未設定"));
return "profile";
}
}
- 基本型(
int/booleanなどプリミティブ)はnullにできないため、未入力を許容する場合はラッパ型(Integer/Boolean)かdefaultValueを使用。 defaultValueを指定するとrequiredは実質falseとして扱われます。
8. 複数値・列挙型・Mapでのパラメータ取得
同名パラメータが複数ある場合はList<T>で受け取れます。選択肢を型安全に扱いたいときはenumを使いましょう。未知のキーもまとめて扱いたい場合はMap<String,String>で全パラメータを取得できます。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import java.util.Map;
@Controller
public class FilterController {
public enum Category { BOOKS, MOVIES, MUSIC }
@GetMapping("/filter")
public String filter(
@RequestParam(name = "id") List<Long> ids, // ?id=1&id=2&id=3
@RequestParam(name = "category", required = false) Category category, // ?category=BOOKS など
@RequestParam Map<String, String> allParams, // 受け取った全パラメータ
Model model) {
model.addAttribute("ids", ids);
model.addAttribute("category", category);
model.addAttribute("allParams", allParams);
return "filter";
}
}
URL例:/filter?id=10&id=20&category=MOVIES&sort=desc(ids=[10,20]、category=MOVIES、allParamsにsort=descも含まれます)
9. 日本語・スペースのURLエンコードと型変換(日時・数値)
クエリに日本語やスペースが含まれる場合、ブラウザやHTTPクライアントがURLエンコード(%エンコード)します。Springは受信時に自動でデコードするため、コントローラでは通常どおり文字列として受け取れます。また、日付などは適切なフォーマット指定で型変換が可能です。
package com.example.demo.controller;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.time.LocalDate;
@Controller
public class ReportController {
@GetMapping("/report")
public String report(
@RequestParam(name = "date")
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date, // 例: 2025-08-01
@RequestParam(name = "limit", defaultValue = "10") int limit, // 数値も自動変換
@RequestParam(name = "keyword", defaultValue = "") String keyword, // 日本語OK(例: 太郎 レポート)
Model model) {
model.addAttribute("date", date);
model.addAttribute("limit", limit);
model.addAttribute("keyword", keyword);
return "report";
}
}
- URL例:
/report?date=2025-08-01&limit=20&keyword=太郎+レポート(空白は+や%20にエンコードされ、Spring側で自動復元)。 @DateTimeFormatでLocalDate/LocalDateTimeなどへ安全に変換可能。形式が合わないと400になるため、UI側の入力形式と合わせるかdefaultValueを活用します。
まとめ
この記事では、Spring Bootの@RequestParamアノテーションの基本的な使い方について解説しました。@RequestParamを使うことで、URLのクエリパラメータを簡単に取得し、コントローラで処理できるようになります。また、デフォルト値を設定するdefaultValueを活用することで、パラメータが省略された場合でもエラーが発生しにくい柔軟なコードが書けます。
特に、Spring Bootを使ったGETリクエストの処理は初心者にも優しく、動的なウェブページを構築する上で役立ちます。Thymeleafと組み合わせることで、取得したデータをHTMLテンプレート上に簡単に表示することが可能です。
以下に、今回の記事で使用した@RequestParamのサンプルコードを再掲します。このコードは、GETリクエストのURLからパラメータを取得し、それを動的にHTMLに表示する仕組みを提供します。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class GreetingController {
@GetMapping("/greet")
public String greet(@RequestParam(defaultValue = "ゲスト") String name, Model model) {
model.addAttribute("name", name);
return "greet";
}
}
このコードに対応するHTMLは以下の通りです。Thymeleafを使ってnameパラメータの値を動的に表示します。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Greeting Page</title>
</head>
<body>
<h1>ようこそ、<span th:text="${name}">ゲスト</span>さん!</h1>
</body>
</html>
Spring Bootアプリケーションを起動し、ブラウザでhttp://localhost:8080/greet?name=太郎にアクセスすることで「ようこそ、太郎さん!」と表示されます。パラメータを省略した場合は「ようこそ、ゲストさん!」と表示され、デフォルト値が活用されます。
Spring Bootの@RequestParamは、シンプルで柔軟なパラメータ処理を提供します。初心者でも簡単に使いこなせるため、ぜひこの記事を参考に、GETリクエストを活用したウェブアプリケーションを作成してみてください。
生徒
「@RequestParamを使えば、URLから簡単にパラメータを取得できるんですね!」
先生
「その通りです。@RequestParamを使うことで、ユーザーの入力に応じた処理が簡単に実現できますよ。」
生徒
「デフォルト値を設定できるのも便利ですね。ユーザーが何も入力しない場合でもエラーが出ないので安心です。」
先生
「そうですね。特に初心者の方には、エラーを減らす工夫が大事です。defaultValueを活用して、より柔軟なコントローラを作りましょう。」
生徒
「次は複数のパラメータを使った検索フォームを作ってみたいです!」
先生
「良いですね。複数の@RequestParamを組み合わせれば、もっと複雑な機能も実現できますよ。ぜひチャレンジしてみてください!」