Javaの@RequestParamアノテーションの使い方を徹底解説!初心者でもわかるリクエストパラメータの基本と応用
Spring Bootを使ったWebアプリケーション開発を、 環境構築から実践まで一通り学びたい方には、 定評のある入門書が参考になります。
Spring Boot 3 プログラミング入門をAmazonで見る※ Amazon広告リンク
生徒
「SpringでWebアプリを作っているんですが、URLからパラメータを受け取る方法を教えてもらえますか?」
先生
「それなら@RequestParamアノテーションを使うといいよ。これを使えば、URLに付与されたクエリパラメータを簡単に取得できるんだ。」
生徒
「クエリパラメータって具体的にどんなものですか?」
先生
「例えば、URLの末尾に?name=Johnのように書く部分のことだよ。さっそくサンプルコードを見ていこう!」
1. @RequestParamアノテーションとは?
@RequestParamは、Spring MVCでHTTPリクエストからクエリパラメータを取得するためのアノテーションです。URLに含まれるパラメータを簡単にメソッドの引数として受け取ることができます。
例えば、http://localhost:8080/hello?name=JohnのようなURLからnameパラメータの値を取得したいときに使います。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello(@RequestParam String name) {
return "Hello, " + name + "!";
}
}
実行結果例
GET /hello?name=John
=> Hello, John!
このように、@RequestParamを使えば、簡単にURLからパラメータを取得して処理できます。
2. @RequestParamのデフォルト値の設定
@RequestParamにはデフォルト値を設定することも可能です。パラメータが指定されなかった場合に備えて、defaultValue属性を使うことができます。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetingController {
@GetMapping("/greet")
public String greet(@RequestParam(defaultValue = "Guest") String name) {
return "Welcome, " + name + "!";
}
}
実行結果例
GET /greet
=> Welcome, Guest!
このように、?name=を指定しなかった場合でも、デフォルトのGuestが返されます。
3. 複数の@RequestParamの利用方法
複数のクエリパラメータを使いたい場合、@RequestParamを複数指定できます。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CalculatorController {
@GetMapping("/calculate")
public String calculate(@RequestParam int a, @RequestParam int b) {
return "Sum: " + (a + b);
}
}
実行結果例
GET /calculate?a=10&b=20
=> Sum: 30
複数のパラメータを使うと、計算などの処理にも応用できます。
Spring FrameworkやThymeleafを使った Webアプリ開発の全体像をやさしく理解したい人には、 この入門書が定番です。
Spring Framework超入門をAmazonで見る※ Amazon広告リンク
4. 必須パラメータの指定
@RequestParamのrequired属性をfalseに設定することで、パラメータを任意にできます。指定しないとデフォルトでは必須になります。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class OptionalParamController {
@GetMapping("/info")
public String getInfo(@RequestParam(required = false) String detail) {
if (detail == null) {
return "No detail provided";
}
return "Detail: " + detail;
}
}
実行結果例
GET /info
=> No detail provided
このようにrequired = falseを使うと、パラメータが無い場合でもエラーになりません。
5. @RequestParamとリストの利用
Springでは、@RequestParamでリスト形式のパラメータを受け取ることもできます。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class BatchController {
@GetMapping("/batch")
public String processBatch(@RequestParam List<String> items) {
return "Items: " + String.join(", ", items);
}
}
実行結果例
GET /batch?items=apple&items=banana&items=cherry
=> Items: apple, banana, cherry
リスト形式で複数の値を受け取ることで、柔軟な処理が可能です。
6. @RequestParamで数値・日付など型変換を行う方法
@RequestParamでは、受け取った値を文字列として扱うだけでなく、数値型や日付型など、Springが自動的に型変換を行ってくれる仕組みがあります。例えば、整数を受け取りたい場合はメソッド引数をint型に指定するだけで、自動的に変換された値が渡されます。
また、日時データを扱いたい場合はJavaのLocalDateやLocalDateTimeを指定し、適切なフォーマットを指定することで、日付形式のパラメータも扱うことができます。Webアプリケーションで検索条件や分析データを扱う際には、こうした型変換機能が非常に役立ちます。
ただし、フォーマットが一致しない場合はエラーになるため、サーバ側で例外処理を追加したり、フォーマット指定を@DateTimeFormatなどと併用することで、より安全な処理が可能になります。
7. @RequestParamでNULLチェックやバリデーションを行うポイント
Webアプリケーションでは、クライアントから送信されるリクエストパラメータが正しい形式であるとは限りません。そのため、@RequestParamで受け取った値に対して、必須チェックや空文字チェックなどのバリデーションを行うことが重要です。
例えば、ユーザー名やメールアドレスなどフォーム入力が必要なリクエストでは、値が空の場合にエラーメッセージを返したり、正規表現で形式をチェックすることが求められます。こうしたバリデーションを適切に行うことで、不正データによる処理エラーを防ぎ、堅牢なアプリケーションを構築できます。
より高度なバリデーションが必要な場合は、@ValidatedやBean Validationを組み合わせてドメインモデルに制約を定義すると、複数画面にまたがるチェックも統一しやすくなります。
8. @RequestParamと@PathVariableの使い分け
Spring MVCでは、URLの一部を動的に取得する@PathVariableと、クエリパラメータを取得する@RequestParamの2つがよく使われます。例えば、商品ページの詳細表示では/product/123のようにパス内に値を含める一方、検索機能では/search?keyword=appleのようにクエリ形式で入力を受け取るのが一般的です。
どちらも値を受け取る仕組みですが、設計の意図が異なります。リソースを特定する場合は@PathVariable、条件検索やフィルタリングに使う場合は@RequestParamを用いると、APIの設計が分かりやすくなります。
REST APIを設計する際には、URLを階層構造として整理し、意味のあるパスでリソースを扱うことで、直感的に理解できるエンドポイントを作成できます。
まとめ
今回の記事では、JavaのSpringフレームワークを使ったWebアプリケーション開発において、@RequestParamアノテーションの基本的な使い方から応用まで詳しく解説しました。このアノテーションを使えば、URLからのクエリパラメータを簡単に取得できるため、柔軟なWebサービスの構築が可能になります。
まずは、@RequestParamの基本を理解することで、ユーザーからの入力や動的なデータ取得が必要な場合に非常に便利です。特に、Web APIやRESTfulなサービスを開発する際に欠かせない技術です。また、デフォルト値や必須・任意パラメータの設定ができるため、ユーザーエクスペリエンスの向上にも役立ちます。
さらに、複数のパラメータを同時に扱ったり、リスト形式でパラメータを受け取ることで、複雑な入力処理もシンプルに記述できます。これにより、例えば検索機能やフィルタリング機能の実装がスムーズに行えます。
ここで紹介した内容を理解すれば、Springを使ったWebアプリケーション開発の基礎がしっかりと身につくはずです。ぜひ実際に手を動かして、コードを書きながら学んでいきましょう。
サンプルプログラムまとめ
最後に、この記事で学んだ内容を1つのサンプルプログラムにまとめます。複数の@RequestParamを活用した例です。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class SummaryController {
@GetMapping("/summary")
public String handleRequest(
@RequestParam String name,
@RequestParam(defaultValue = "Guest") String role,
@RequestParam(required = false) List<String> items) {
String itemList = (items != null) ? String.join(", ", items) : "No items";
return "User: " + name + " (Role: " + role + ") - Items: " + itemList;
}
}
実行結果例
GET /summary?name=Alice&role=Admin&items=Book&items=Pen
=> User: Alice (Role: Admin) - Items: Book, Pen
GET /summary?name=Bob
=> User: Bob (Role: Guest) - Items: No items
このサンプルでは、ユーザー名、役割、アイテムのリストをURLパラメータで受け取り、柔軟に処理を行っています。これにより、実際の業務アプリケーションにおいても役立つ実装が可能です。
生徒
「Springの@RequestParamって便利ですね!色々なパラメータを受け取れるのがわかりました。」
先生
「そうだね、特にWeb APIではよく使うから、しっかり覚えておこう。デフォルト値の設定やリストの活用など、応用も効くんだ。」
生徒
「必須じゃないパラメータを扱う方法も学べたので、次のプロジェクトで試してみたいです!」
先生
「いいね!次は@PathVariableを使ったURLパスのパラメータ取得についても学んでみるとさらに理解が深まるよ。」
生徒
「それも楽しみです!今回の知識を活かして、もっと色んなアプリを作ってみます。」