第4章 初めてのSpringアプリケーション
4.4 簡易ログインアプリケーションの説明(@RequestParam版)
4.3で作成したアプリケーションをもとに、Springの処理が実際どのような流れで動作しているのかを説明していきます。
4.4.1 LoginParamControllerクラス
このアプリケーションの一番の目的は「ブラウザから入力されたデータを受け取る方法を知る」ことです。
先ほどのHelloControllerとは違い、リクエストマッピングで関連付けたメソッド(loginParam1)に「引数」が追加されています。
public String loginParam1(@RequestParam String id, @RequestParam String pass) { ... }
これは以下のように分けて考えておきましょう。
つまり、String id , String passという引数の前に「@RequestParam」というアノテーションが付いています。
このアノテーションは、リクエストに渡されたパラメータの値を示します。「パラメータ」とは、わかりやすくいえば「URLやフォームから送信された値」のことです。
このアノテーションを指定することで、URLやフォームから送られた値が、この引数に設定されるようになります。今回の例ならば、URLで ?id=001&pass=aaa として送られた値が、@RequestParamによって、String id , String pass の引数に渡されるようになっている、というわけです。
URLやフォームから送信された値は、このように「@RequestParamアノテーションを付けた引数」に自動的に渡されます。後は、この値を取り出して処理すればいいのです。特殊なオブジェクトからパラメータの値を取り出すような作業は一切不要になります。
4.4.2 パラメータが送信されない場合のエラー対策
パラメータの受け取り方にはまだ他にも色々な方法があります。
ただ、現時点での問題は4.3.4でも試してもらったように、「パラメータが送信されない場合はエラーとなってしまう」ことでしょう。こういった場合にもきちんと対処方法を用意してくれています。
下記の内容を追記して、再度アクセスし直してみましょう。
■ソースコード
【ファイル名:LoginParamController.java】
アプリケーションにアクセス(エラーにならなくなる)
以下のアドレスから簡易ログインアプリケーションにアクセスします。
URL:http://localhost:8080/loginParam1
図 4.4 1:アプリケーションアクセス画面(エラーにならなくなる)
合わせて14行目にもエラー処理を追加してもらいましたが、ここで重要なのはメソッドに追加した(required = false)です。「@RequestParamアノテーションの引数」を追加しています。
public String loginParam1(@RequestParam(required = false) String id, @RequestParam(required = false) String pass) { ... }
この引数を指定することで、パラメータが送信されていない場合は「null」が初期値として代入されるようになりエラーは発生しなくなりました。つまり、先ほどの引数を指定しない状態では(required = true)となっており、パラメータの送信は必須扱いとなっていた、というわけですね。
このようにアノテーションの引数を指定することで、必要に応じた細かな動作を制御することもできるので、Spring Bootの基礎を学んだ後も色々と調べてみるともっと幅が広がることでしょう。