Controllerの実装について
Controllerは、@Controller アノテーションを付加したクラスとして作成します。
@Controller @RequestMapping("sample") public class XxxController { // ... }
リクエストとハンドラメソッドのマッピング方法について
リクエストを受け取るメソッドは、@RequestMappingアノテーションを付与します。
@RequestMapping(value = "hello") public String hello() { // ... }
リクエストとハンドラメソッドをマッピングするためのルールについては、@RequestMappingアノテーションの属性を指定します。
項番 | 属性名 | 説明 |
---|---|---|
1 | value | マッピング対象にするリクエストパスを指定する(複数可)。 |
2 | method | マッピング対象にするHTTPメソッド(RequestMethod型)を指定する(複数可)。 GET/POSTについてはHTML form向けのリクエストをマッピングする際にも使用するが、それ以外のHTTPメソッド(PUT/DELETEなど)はREST API向けのリクエストをマッピングする際に使用する。 |
3 | params | マッピング対象にするリクエストパラメータを指定する(複数可)。 主にHTML form向けのリクエストをマッピングする際に使用する。このマッピング方法を使用すると、HTML form上に複数のボタンが存在する場合のマッピングを簡単に実現する事ができる。 |
4 | headers | マッピング対象とするリクエストヘッダを指定する(複数可)。 主にREST APIやAjax向けのリクエストをマッピングする際に使用する。 |
5 | consumes | リクエストのContent-Typeヘッダを使ってマッピングすることが出来る。マッピング対象とするメディアタイプを指定する(複数可)。 主にREST APIやAjax向けのリクエストをマッピングする際に使用する。 |
6 | produces | リクエストのAcceptヘッダを使ってマッピングすることが出来る。マッピング対象とするメディアタイプを指定する(複数可)。 主にREST APIやAjax向けのリクエストをマッピングする際に使用する。 |
リクエストパスのマッピングについて
下記のように、@RequestMapping の value に "hello" を指定した場合、 sample/hello というURLにアクセスすると、helloメソッドが実行されます。 ※hello の前の sample のURLについては、Controllerクラスの@RequestMapping で定義したvalueの値が利用されます。
@RequestMapping(value = "hello") public String hello() {
また、複数指定した場合は、OR条件で扱われます。 下記の定義の場合、 sample/hello 又は sample/bonjour というURLにアクセスすると、helloメソッドが実行されます。
@RequestMapping(value = {"hello", "bonjour"}) public String hello() {
ハンドラメソッドの引数について
ハンドラメソッドの引数は様々な値をとることができます。
画面(View)にデータを渡したい場合について
画面(View)に表示するデータを渡したい場合は、 org.springframework.ui.Model(以降 Model と呼ぶ) をハンドラメソッドの引数として受け取り、 Modelオブジェクトに渡したいデータを追加します。
- SampleController.java
@RequestMapping("hello") public String hello(Model model) { // (1) model.addAttribute("hello", "Hello World!"); // (2) model.addAttribute(new HelloBean("Bean Hello World!")); // (3) return "sample/hello"; // returns view name }
- hello.jsp
Message : ${f:h(hello)}<br> <%-- (4) --%> Message : ${f:h(helloBean.message)}<br> <%-- (5) --%>
- HTML of created by View(hello.jsp)
Message : Hello World!<br> <!-- (6) --> Message : Bean Hello World!<br> <!-- (6) -->
- Modelオブジェクトを引数として受け取ります。
- 引数で受け取ったModelオブジェクトのaddAttributeメソッドを呼び出し、渡したいデータをModelオブジェクトに追加します。 ※例では、hello という属性名で HelloWorld! という文字列のデータを追加しています。
- addAttributeメソッドの第一引数を省略すると値のクラス名の先頭を小文字にした文字列が属性名になります。 ※例では、 model.addAttribute("helloBean", new HelloBean()); を行ったのと同じ結果になります。
- View(JSP)側では、「${属性名}」と記述することでModelオブジェクトに追加したデータを取得することができます。
- 「${属性名.JavaBeanのプロパティ名}」と記述することでModelに格納されているJavaBeanから値を取得することができます。
- JSP実行後に出力されるHTMLのイメージです。