1. test 1
  2. test 2
  3. test 3
  4. test 4
  5. test 5
  6. test 6
コース一覧
Spring Boot入門
クエリパラメータの受け取り

Spring Boot入門

Java で Web API サーバーを作るための Spring Boot の入門コースです。DI コンテナ、REST コントローラ、リクエスト検証、レイヤ分割、Spring Data JPA、例外ハンドリング、テストまでを扱います。毎レッスン、Spring が裏側でやっている判断そのものを pure Java の関数として自分で書き、フレームワークが何を肩代わりしてくれているのかを手触りで理解できる構成にしました。約 12 時間 (1 日 30 分 × 24 日) で 48 レッスンを修了できます。

1
Spring Bootとは何か
01. Spring Bootで何が作れるのか10分
02. サーブレットからフレームワークへ15分
03. ルーティング表という発想15分
04. プロジェクトの構成10分
05. 起動のしくみと自動設定15分
06. パスのマッチング15分
2
DIコンテナ
01. newで書くと何が困るのか15分
02. コンストラクタインジェクション15分
03. インターフェースへの依存15分
04. @Componentと@Bean15分
05. 自作のDIコンテナ20分
06. Beanのスコープとライフサイクル15分
3
RESTコントローラ
01. RESTという設計方針15分
02. @RestControllerの役割15分
03. @GetMappingとパス変数15分
04. クエリパラメータの受け取り15分
05. @PostMappingとリクエストボディ15分
06. ステータスコードの選び方15分
07. ResponseEntityで組み立てる15分
4
リクエストとレスポンスの変換
01. JSONとオブジェクトの往復15分
02. DTOとエンティティを分ける15分
03. recordでDTOを書く15分
04. 入力検証の基本15分
05. 検証エラーをまとめて返す15分
06. アノテーションによる検証15分
5
レイヤ構成とビジネスロジック
01. 3層アーキテクチャ10分
02. @Serviceに置くもの15分
03. 状態遷移をルールにする15分
04. 料金計算のような業務ロジック15分
05. @Transactionalとは何か15分
06. トランザクションの巻き戻し15分
6
データアクセス
01. @Entityとテーブルの対応15分
02. リポジトリという抽象15分
03. メソッド名からクエリを作る20分
04. 検索条件の組み立て15分
05. ページングと並び替え15分
06. N+1問題15分
7
例外処理と横断的関心事
01. 例外をHTTPに変換する15分
02. @ExceptionHandlerと@ControllerAdvice15分
03. エラーレスポンスの形を決める15分
04. フィルタとインターセプタ15分
05. ログとリクエストの追跡15分
06. 設定値の外部化15分
8
テストと仕上げ
01. テストの種類と使い分け15分
02. Serviceの単体テスト15分
03. モックで依存を差し替える15分
04. MockMvcでエンドポイントを試す15分
05. 本番へ出すための次の一歩10分

クエリパラメータの受け取り

このレッスンでは、@RequestParam でクエリパラメータを受け取り、必須かどうかと既定値を制御できるようになります。

クエリ文字列とは何か

URL のうち、疑問符から後ろの部分をクエリ文字列と呼びます。

プレーンテキスト

/users?page=2&size=10&sort=name

ここでは page が 2、size が 10、sort が name です。key=value の組をアンパサンドでつないだだけの、とても素朴な形式です。パス変数が「どのリソースか」を決めるのに対し、クエリパラメータは「その集合をどう見せるか」を調整します。

@RequestParam で受け取る

Java

@GetMapping("/users") public List<UserResponse> list(@RequestParam int page, @RequestParam int size) { ... }

@PathVariable と同じように、名前が一致するパラメータが引数に入ります。文字列から int への変換も Spring が行います。名前を変えたい場合は @RequestParam("page") int pageNumber のように書きます。

required と defaultValue

ここからが本題です。@RequestParam は既定で 必須 です。パラメータが無いリクエストが来ると、そのまま 400 になります。

Java

@RequestParam int page // 必須。無ければ 400 @RequestParam(required = false) Integer page // 任意。無ければ null @RequestParam(defaultValue = "1") int page // 無ければ 1 が入る

2 番目に注意が必要です。required = false にした場合、値が無いときに null が入るので、受け取る型は int ではなく Integer にしなければなりません。int のままだと null を代入できず落ちます。

3 番目の defaultValue を指定すると、required は自動的に false 扱いになります。既定値があるのだから必須にする意味がないからです。ページングのように「指定されなければ 1 ページ目の 20 件」と決まっているものは、この形が一番読みやすくなります。

書き方パラメータありパラメータなし
@RequestParam int pageその値400 エラー
@RequestParam(required = false) Integer pageその値null
@RequestParam(defaultValue = "20") int sizeその値20

既定値は文字列で書く

defaultValue = "20" のように、数値でも文字列で書きます。アノテーションの属性値として使えるのが定数式に限られるため、Spring は一度文字列で受け取ってから引数の型へ変換する、という設計になっています。defaultValue = 20 とは書けないので覚えておいてください。

パラメータをまとめて受け取る

パラメータが増えてきたら、専用のクラスにまとめる書き方もあります。

Java

@GetMapping("/users") public List<UserResponse> list(UserSearchCondition condition) { ... }

アノテーションを付けずにオブジェクトを引数に取ると、Spring は同名のプロパティへセッター経由で値を詰めてくれます。検索条件が 5 つも 6 つもあるような画面では、引数を並べるよりこちらの方が読みやすくなります。

演習で確かめます

Spring では、クエリ文字列を key と value に分解して型変換し、無ければ defaultValue を入れる、という一連の処理をフレームワークが引き受けています。今回はその中身を自分の手で書きます。page=2&size=10 のような文字列を解析し、page と size を取り出してください。指定が欠けていたときは page が 1、size が 20 という既定値を使います。

要件

  1. アンパサンドで区切り、さらに等号で key と value に分けて解析すること
  2. page が無ければ 1、size が無ければ 20 を使うこと
  3. 戻り値は入力の順番によらず page=2,size=10 の順に並べること

入出力例

parseQuery("page=2&size=10") → "page=2,size=10" parseQuery("size=50&page=3") → "page=3,size=50" parseQuery("page=5") → "page=5,size=20" parseQuery("size=100") → "page=1,size=100" parseQuery("") → "page=1,size=20" parseQuery("sort=name&page=4") → "page=4,size=20"

ヒント

String の split を使い、まず & で組に分け、次に = で key と value に分けます

既定値を先に page = 1、size = 20 として変数に入れておき、見つかったときだけ上書きすると分岐が減ります

空文字列を split すると要素が 1 つで中身が空の配列になるので、= を含まない要素は読み飛ばすようにします

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/09

関連レッスン

  • @PostMappingとリクエストボディ

    受け取った内容から新しいリソースの表現を組み立てます。

  • ステータスコードの選び方

    操作と結果から適切なステータスコードを決められるようになります。

  • ResponseEntityで組み立てる

    本文とステータスとヘッダを一体で返す形を実装します。

  • JSONとオブジェクトの往復

    キーと値の対応づけを自分で実装し、変換の中身を掴みます。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • クエリパラメータURL の `?` 以降に付ける `key=value` 形式のリクエストデータ
  • URLページの住所全体
  • 変数データに名前をつけて参照する仕組み
  • 引数位置引数=順番で渡す。
  • リクエストWeb 通信の基本単位、ブラウザの問い合わせとサーバーの返答
  • 属性インスタンス属性=各インスタンス固有の値(self.name)。
  • 設計何をどう作るかを決める前工程
  • クラスデータと振る舞いを束ねる単位
main.java
学習モード
エディタを読み込んでいます

メモ

クエリパラメータの受け取り

⌘S で保存