【Spring Boot】@RequestParam の応用(必須/任意/デフォルト値)をやさしく解説

Java入門・実践
スポンサーリンク
スポンサーリンク

はじめに

Spring Boot の API でクエリパラメータを受け取るときに使う
@RequestParam

「必須にしたいときは?」
「任意にしたいときは?」
「デフォルト値を入れる方法は?」

こういった疑問は実務でとても多いです。

この記事では、@RequestParam の応用を
やさしく・実務で役立つ形 で整理していきます。

まずは基本のコードから見ていきましょう。

まずはコードを確認

Java
@GetMapping("/search")
public String search(@RequestParam String keyword) {
    return "keyword: " + keyword;
}

このように、
クエリパラメータを受け取るためのアノテーション
それが @RequestParam です。

@RequestParam の基本

一言でいうと、

「URL の ? 以降の値を受け取るためのアノテーション」

です。

例:

/search?keyword=apple

必須パラメータ(required = true)

デフォルトは「必須」

Java
@GetMapping("/search")
public String search(@RequestParam String keyword) {
    return keyword;
}

/search?keyword=apple は OK
/search400 Bad Request になります。

明示的に書く場合

Java
@RequestParam(required = true)

任意パラメータ(required = false)

パラメータがなくても OK にする

Java
@GetMapping("/search")
public String search(@RequestParam(required = false) String keyword) {
    return keyword;
}

/search でもエラーになりません。

値がないときは null

  • keyword が指定されない → null
  • keyword= のように空 → 空文字

デフォルト値を設定する(defaultValue)

パラメータがなくても値を入れたいとき

Java
@GetMapping("/search")
public String search(@RequestParam(defaultValue = "none") String keyword) {
    return keyword;
}

/search → keyword = “none”
/search?keyword=apple → keyword = “apple”

required = false を書かなくてもよい

defaultValue を指定すると
自動的に required = false になります。

複数パラメータを扱う

例:ページング

Java
@GetMapping("/items")
public String list(
        @RequestParam(defaultValue = "1") int page,
        @RequestParam(defaultValue = "10") int size) {
    return page + ":" + size;
}

実務でよく使うパターンです。

List で受け取る

クエリパラメータを複数指定

/items?category=book&category=toy

Spring 側

Java
@GetMapping("/items")
public String list(@RequestParam List<String> category) {
    return category.toString();
}

名前を変えて受け取る(name / value)

URL のパラメータ名とフィールド名を変えたいとき

Java
@GetMapping("/search")
public String search(@RequestParam(name = "q") String keyword) {
    return keyword;
}

/search?q=apple → keyword = “apple”

実務でよくある使い分け

必須にしたいとき

  • 検索キーワードが必須
  • ID が必須
Java
@RequestParam String keyword

任意にしたいとき

  • ソート順
  • フィルタ条件
Java
@RequestParam(required = false) String sort

デフォルト値を入れたいとき

  • ページング
  • ソート順の初期値
Java
@RequestParam(defaultValue = "1") int page

あわせて知っておきたいポイント

@RequestParam は GET 以外でも使える

POST / PUT でもクエリパラメータを受け取れます。

@RequestBody と併用できる

Java
@PostMapping("/users")
public String create(
    @RequestParam(required = false) String token,
    @RequestBody UserRequest request
)

required = false のときは null に注意

DTO に詰める場合は Optional も使えます。

Java
@RequestParam Optional<String> keyword

使うときに気をつけたいこと

必須パラメータは明確に

API の仕様としてわかりやすくなります。

デフォルト値は仕様として決める

曖昧にすると後で混乱します。

パラメータ名の統一

プロジェクト全体で揃えると保守性が上がります。

まとめ

@RequestParam は、
「クエリパラメータを柔軟に受け取るためのアノテーション」
です。

  • required = true(デフォルト)
  • required = false(任意)
  • defaultValue(デフォルト値)
  • List や Optional も使える
  • name でパラメータ名を変えられる

難しく聞こえますが、
「必須か、任意か、デフォルトか」
を決めるだけで十分です。


decopon
decopon

@RequestParam を使いこなすと、
API の入り口が一気にきれいになります。
必須・任意・デフォルト値を丁寧に扱うだけで、
API の使いやすさがぐっと上がります。
あなたの開発が、今日より少しだけ楽になりますように。

moco
moco

パラメータにも“必須”と“おまかせ”があるなんて…かわいいね。

コメント

タイトルとURLをコピーしました