カテゴリ: Spring 更新日: 2025/12/14

Spring Bootの@RequestParamの使い方を解説!初心者でもわかるGETリクエストのパラメータ取得

パラメータを受け取る(@RequestParam)
パラメータを受け取る(@RequestParam)

先生と生徒の会話形式で理解しよう

生徒

「Spring BootでURLパラメータを受け取る方法を知りたいんですが、どうすればいいんでしょうか?」

先生

「Spring Bootでは@RequestParamアノテーションを使って、簡単にURLパラメータを取得できますよ。」

生徒

「具体的にどんな風に使うんですか?」

先生

「それでは、基本の使い方を説明しましょう。」

1. @RequestParamとは?

1. @RequestParamとは?
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の基本的な使い方

2. @RequestParamの基本的な使い方
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の活用例

3. defaultValueの活用例
3. defaultValueの活用例

@RequestParamdefaultValue属性を使うことで、パラメータが省略された場合に表示する値をあらかじめ設定できます。これにより、ユーザーが入力を省略した場合の対応が簡単になります。

例えば、nameパラメータが空でも「ゲスト」として表示されるため、常にデフォルトの値が使われてエラーが発生しにくいのが特徴です。

4. @RequestParamを使ったページの表示

4. @RequestParamを使ったページの表示
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を設定する例

5. 複数のパラメータにdefaultValueを設定する例
5. 複数のパラメータにdefaultValueを設定する例

@RequestParamを使って複数のパラメータを取得し、それぞれにdefaultValueを設定することも可能です。次の例では、検索機能を実装して、keywordcategoryの値を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(&quot;/search&quot;)
    public String search(
            @RequestParam(defaultValue = &quot;&quot;) String keyword,
            @RequestParam(defaultValue = &quot;すべて&quot;) String category,
            Model model) {
        model.addAttribute(&quot;keyword&quot;, keyword);
        model.addAttribute(&quot;category&quot;, category);
        return &quot;search&quot;;
    }
}

このように、URLに?keyword=Java&category=プログラミングのように指定すると、keywordcategoryの値をそれぞれ取得し、表示できます。

6. 実際に動作を確認しよう

6. 実際に動作を確認しよう
6. 実際に動作を確認しよう

Spring Bootアプリケーションを起動し、ブラウザでhttp://localhost:8080/greet?name=太郎にアクセスすることで「ようこそ、太郎さん!」と表示されることを確認できます。URLのパラメータがない場合は、デフォルト値の「ゲスト」が表示されます。

7. @RequestParamの主な属性(name/value・required・defaultValue・Optional)

7. @RequestParamの主な属性(name/value・required・defaultValue・Optional)
7. @RequestParamの主な属性(name/value・required・defaultValue・Optional)

@RequestParamには、パラメータ名を指定するname(またはvalue)、必須かどうかを制御するrequired、省略時の値を与えるdefaultValueなどの属性があります。未指定時はrequired=trueのため、値が来ないと400エラーになります。未入力を許容したい場合はrequired=falsedefaultValue、あるいは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でのパラメータ取得

8. 複数値・列挙型・Mapでのパラメータ取得
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=descids=[10,20]category=MOVIESallParamssort=descも含まれます)

9. 日本語・スペースのURLエンコードと型変換(日時・数値)

9. 日本語・スペースのURLエンコードと型変換(日時・数値)
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側で自動復元)。
  • @DateTimeFormatLocalDate/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を組み合わせれば、もっと複雑な機能も実現できますよ。ぜひチャレンジしてみてください!」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Spring Bootの@RequestParamとは具体的に何をするためのものですか?

@RequestParamは、URLのクエリパラメータを取得するためのアノテーションです。例えば、GETリクエストでURLの一部として送られてきたデータをコントローラで受け取り、利用することができます。

@RequestParamのdefaultValue属性とは何ですか?どのように使いますか?

defaultValue属性は、URLパラメータが指定されなかった場合に使用されるデフォルト値を設定するためのものです。例えば、defaultValueを「ゲスト」に設定すれば、パラメータが空の場合でもエラーにならず「ゲスト」と表示されます。

URLパラメータを複数受け取る場合、@RequestParamはどのように使いますか?

@RequestParamを複数指定することで、複数のURLパラメータを取得できます。例えば、検索機能で「keyword」と「category」の2つのパラメータを受け取る場合、それぞれに@RequestParamを設定します。

@RequestParamを使うときに発生しやすいエラーにはどのようなものがありますか?

例えば、URLパラメータの名前が一致していない場合や、必須のパラメータが省略されている場合にエラーが発生します。defaultValueを設定すると、このようなエラーを回避できます。

Spring Bootで@RequestParamを使った場合、どのようにHTMLにデータを表示できますか?

Thymeleafを使用することで、コントローラから渡されたデータをHTMLに表示できます。例えば、th:textを使えば、取得したパラメータを動的に表示することができます。

デフォルト値を設定せずに@RequestParamを使うとどうなりますか?

パラメータが必須となり、指定されなかった場合にエラーが発生します。エラーを防ぐためにはdefaultValueを設定することをお勧めします。

GETリクエストのURLパラメータを受け取る以外に、@RequestParamを他のリクエストで使用できますか?

@RequestParamは主にGETリクエストのクエリパラメータを処理するために使用されますが、POSTリクエストで送信されたパラメータを取得することも可能です。

@RequestParamの値をコントローラ内で加工したい場合、どのようにすればいいですか?

@RequestParamで取得した値をコントローラ内で変数に格納し、必要に応じて文字列操作や条件分岐を行うことで加工できます。

Spring Bootで@RequestParamを使う利点は何ですか?

@RequestParamは、URLパラメータを簡潔かつ効率的に取得できるため、コードの可読性が高まり、エラー処理もしやすくなります。

初心者が@RequestParamを使う際に注意すべきポイントは何ですか?

URLパラメータ名と@RequestParamの引数名を一致させること、defaultValueを設定してエラーを防ぐこと、またパラメータの値が期待通りであるかを確認することが重要です。
カテゴリの一覧へ
新着記事
JavaのHttpServletResponseWrapperを完全解説!初心者でも理解できるレスポンス処理のしくみ
JavaのScannerクラスの使い方を徹底解説!初心者でも簡単に学べる入力処理
JavaのArrayListクラスとaddメソッドを完全解説!初心者でもわかるリスト操作
Javaの@Idアノテーションを徹底解説!初心者でもわかるデータベースとの連携方法
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Javaのラムダ式で配列を扱う!Arrays.streamの基本と注意点を初心者向けに解説
No.3
Java&Spring記事人気No3
JavaのRuntimeExceptionを完全解説!初心者でもわかるjava.langパッケージの基礎
No.4
Java&Spring記事人気No4
JavaのBigDecimalクラスcompareToメソッド完全ガイド!初心者でもわかる大小比較の基本
No.5
Java&Spring記事人気No5
JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
No.6
Java&Spring記事人気No6
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.7
Java&Spring記事人気No7
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法
No.8
Java&Spring記事人気No8
JSPとは何か?初心者向けにできること・仕組み・特徴をやさしく解説