Spring MVCでAnnotation-Basedなコントローラの作り方


スポンサーリンク

前回の記事ではControllerをimplementsするという古いスタイルのControllerの作り方のサンプルを見てみました。
Spring2.5からは、@Controllerというアノテーションを使ってコントローラを定義する方法が紹介されています。

annotation-basedなControllerを作るメリットはいくつかありますが、一つ目は、コントローラクラスで複数のアクションを定義できることです。
似たようなアクションを同じコントローラのクラスに定義することができます。そのため、クラスの数を減らすことができます。

次に、アノテーションを使うことで、設定ファイルにリクエストマッピングを定義しなくても良くなります。

Controller Annotation

以下のようにクラス名の上にアノテーションを定義します。

@Controller
public class HogeController {

	//request handling method
}

こうやって@Controllerを書くことで、Springはコントローラを見つけることができます。

アノテーションを使う準備として、spring-context schemaを設定ファイルに書きます。

xmlns:context="http://www.springframework.org/schema/context"

STSを使ってプロジェクトを生成した場合はデフォルトで書かれていると思います。

そして、次に、エレメントを設定ファイルに追加します。

<context:component-scan base-package="sample2.controller"/>

この記述をすることで、コントローラクラスを含むパッケージを認識させることができます。
指定したサブパッケージも検索対象になります。


RequestMapping Annotation

RequestMappingアノテーションは名前のとおり、リクエストとメソッドをマッピングします。

@Controller
public class HogeController {

	@RequestMapping(value = "hoge_input")
	public String inputHoge() {
		//do something
		return "hogeForm";
	}
}

valueという属性を設定することで、URLとメソッドをマッピングします。

http://domain/context/hoge_input

が上のメソッドと紐付けられます。
valueを空にした場合は、

http://domain/context

のURLと紐付けられます。

valueの他にもmethodという属性があり、HTTPのメソッドを指定することができます。

@Controller
public class HogeController {

	@RequestMapping(value = "hoge_input",
				method={RequestMethod.POST, RequestMethod.PUT})
	public String inputHoge() {
		//do something
		return "hogeForm";
	}
}

methodの指定がない場合は、全てのHTTPメソッドを処理します。


では、次の記事では実際にAnnotation Based Controllerのサンプルを作ってみます。

<参考>

Spring Framework 4プログラミング入門

Spring Framework 4プログラミング入門