2012-05-03 11 views
14

私は春のフレームワークに慣れています.... Googleで検索しています...クラスレベルでアノテーションされた@RequestMappingを持つサンプルがいくつか見つかりました。 menthodレベルのRequestMappingアノテーションは誰でもクラスレベルのRequestMappingとメソッドレベルのRequestMappingの違いを説明できますか?誰でもクラスレベルのコントローラとメソッドレベルのコントローラの違いを教えていただけますか?

a)は、クラスレベル

b)のメソッドレベル

また

私はタイプといくつかの@Requestmappingが見つかりました:GET /ポスト

ので、私は、彼らのアプリケーションについて少し混乱していますいくつかの例は型パラメータを持たない。

どちらのアプローチが良いですか?

新しいバージョン(> Spring 2.5)は、リクエストマッピングのパラメータタイプを必要としませんか?

答えて

16

コントローラには、クラスレベルで@Controllerとマークする必要があります。 @RequestMappingアノテーションは、クラスとメソッドの両方のレベルで適用できます。そうである場合、メソッド注釈は相対URL(クラスレベルのURLを基準にした相対URL)として解釈されます。ただし、メソッドレベルのアノテーションが存在する必要があります。そうでなければ、メソッドはマップされません。

注釈では、パラメータはデフォルト値でオプションとしてマークすることができます。メソッドのパラメータはそのような場合です。デフォルトはGETですが、明示的にPOSTなどに設定することができます。

参照:

+0

パトリックフロイド:このような貴重な情報をありがとう! – JOHND

+0

「もしそうなら、メソッド注釈は相対URL(クラスレベルのURLを基準にした相対URL)として解釈されますが、メソッドレベルの注釈がなければなりません。そうでなければメソッドはマップされません。私はあなたに感謝します! – JOHND

+11

メソッドがfoo/barにマップされている場合、foo/barはアドレスです。しかし、クラスがbazにマップされていてメソッドがfoo/barにマップされている場合、メソッドのアドレスはbaz/foo/bar –

-1

1が優れている、あなたの最後の質問、すなわちに答えるために、私たちはこれらの二つの組み合わせを使用して生産に言うでしょう。たとえば、ユーザーコントローラがある場合、クラスを「/ user」にマップし、getSettings()のメソッドは「/設定」にマップされ、getPermissions()のメソッドは「/許可」などにマップされます。

これらのメソッドを直接 "/ user/settings"と "/ user/permissions"にマップし、クラスマッピングをスキップします。しかし、ほとんどの場合、最初のアプローチが好まれます。

関連する問題