07.Controllerの処理メソッドとリクエスト(URL等)とのマッピング方法

概要

ここでは、あるリクエストが来たときにどの処理メソッドとマッピングするのか?、その設定方法を見ていきます。

Controllerのお話ですので、できれば、以下の記事を先立って読んでいただけるとよいかなと思います。

参考: 04.基本概念:Controllerの処理フロー

@RequestMappingを使用するので、結局、@RequestMappingアノテーションの説明をしていくことになります。

@RequestMappingの概要

@RequestMappingは、クラスとメソッドの両方に使用可能です。

クラスに使用した場合は、URLのプレフィックス(つまり、親パス)に一致させることができます。

メソッドに使用した場合、親パスからの相対パスを指定できます。

また、メソッドの場合は、絶対パスも指定できます。

@RequestMappingで使用できる属性について

このアノテーションの記述例を示しておきます。

雰囲気がつかめたところで、1つずつ属性を見ていきましょう。

methodなどの属性は任意なので省略することもできます。

【記述例】

@RequestMapping(value="edit/input", method=RequestMethod.GET,

headers="Accept=application/*", params="user.id=002")

value属性

URLのパスを記述します。URLにマッチする場合に、メソッドが呼ばれることになります。

value属性には、Ant形式の記述もできますので、ワイルドカード(*, **)も使用できます。

URIテンプレートも使用できます。

【URIテンプレートとは】

URLの一部をパラメタで受け取るための機構です。

例題を見てもらった方が理解が早いと思いますので以下をご覧ください。Spring MVCドキュメントの引用です。

【URIテンプレートの記述例】

@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)

public String findOwner(@PathVariable("ownerId") String ownerId, Model model) {

// implementation omitted

}

method属性

GET、POST、PUT、DELETEなどのメソッドを指定できます。

headers属性

HTTPのヘッダを指定できます。

記法は以下のとおりです。

例:

Accept ・・・"Accept"というヘッダが存在する場合にマッチ。

!Accept ・・・"Accept"というヘッダが存在しない場合にマッチ。

foo=abc ・・・fooヘッダに"abc"の文字列が設定されている場合にマッチ。

foo!=abc ・・・fooヘッダに"abc"の文字列が設定されていない場合にマッチ。

一部のヘッダ("Accept"、"Content-Type")には、ワイルドカードも使用できるようです。

他のヘッダについては完全一致マッチになります。

複数指定した場合は、ANDでマッチするようです。

【AND複数記述例】

@RequestMapping(headers={"Accept=application/*","Content-Type=text/*"})

一部のヘッダではカンマ区切りで複数記述できるようで、そうするとORでマッチするようです。

【AcceptのOR複数記述例】

@RequestMapping(headers="Accept=application/*,application0/*")

params属性

リクエストパラメタを指定できます。

記法は、headersと同じです。

Created Date: 2012/04/08