@RequestParamを使ってリクエストパラメータを受取る

spring

コントローラクラスではリクエストパラメータを取得することが可能です。実践的なプログラムを作成するうえで、リクエストパラメータの取得は必要不可欠です。
より実用的なプログラムを作成するのであれば、パラメータの受け渡し方法は必ず考慮する必要があります。

[スポンサーリンク]

今回は、アノテーション@RequestParamを使ったリクエストパラメータ(GETパラメータ&POSTパラメータ)の取得方法を解説します。

この章でやること

コントローラクラスで、リクエストパラメータを取得します。

パラメータを受け取るクラスとjspの作成

リクエストパラメータは、コントローラクラスで受取り、受け取ったパラメータはjspで表示します。

コントローラクラス

@Controller
public class HomeController {

    /**
     * パラメータを受け取るメソッドです
     */
    @RequestMapping(value = "/test", method = RequestMethod.GET)
    public String home(@RequestParam("data") String data,
                       @RequestParam("count") Integer count,
                       Locale locale,
                       Model model) {

        // 受取りパラメータ「data」をjspに出力します。
        model.addAttribute("data", data );

        // 受取りパラメータ「count」をjspに出力します。
        model.addAttribute("count", count );

        return "home";
    }
}

jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
	<title>Home</title>
</head>
<body>
<h1>
	Hello!
</h1>

<P>  data parameter is <font color="red">${data}</font> </P>
<P>  count parameter is <font color="red">${count}</font> </P>
</body>
</html>

実行結果

上記のコントローラクラスをローカルサーバで実行して、ブラウザから以下URLを指定して下さい。
http://localhost:8080/controller-test/test/?data=test&count=1

requestparam1

解説その1

コントローラクラスの@RequestParamでリクエストパラメータを取得しています。
リクエストパラメータの型を指定して取得することが可能です。

解説その2

※※※※※重要※※※※※
リクエストパラメータの「count」の型をIntegerで宣言していますが、「count」へ文字列を入れたらどうなるでしょうか?
結果は、400エラーになります。(NumberFormatExceptionが発生します。)

requestparam2

余談

これは余談ですが、ログをみてみますと、例外発生後、springMVCのデフォルトハンドラの「DefaultHandlerExceptionResolver」が動いていますね。
springMVCはデフォルトでは、例外を「DefaultHandlerExceptionResolver」がハンドリングしてくれます。
もちろん、「DefaultHandlerExceptionResolver」は拡張可能なクラスです。

DEBUG: org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Resolving exception from handler [public java.lang.String com.example.controller.HomeController.home(java.lang.String,java.lang.Integer,java.util.Locale,org.springframework.ui.Model)]: org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer'; nested exception is java.lang.NumberFormatException: For input string: "p"

springMVCのバージョン

org.springframework-versionは、3.1.0を使っています。
javaは、1.6.0を使っています。

最後に

Webアプリを作成するにあたり、リクエストパラメータの受取りは、必要不可欠です。
コントローラクラスでのパラメータ受取り方法と、パラメータ異常時の挙動についてはしっかりとおさえておきたいですね。
今回は、パラメータ受取り方法を実践してみたので、次回はパラメータ異常時の挙動について実践していきたいと思います。