2011-06-23 7 views
5

私は春の注釈ベースのコントローラを使用しています。私はURL /ユーザー/メッセージをクエリパラメータタグが存在する場合にはコントローラAにマッピングする必要があります。これは、パラメータタグが存在するときに、実装をきれいに保つために、別のコントローラで処理したいパラメータとともにいくつかのパラメータが存在する可能性があるため必要です。これを春に行う方法はありますか。また、この問題に対する他のエレガントな解決方法もありますか?クエリパラメータに基づいて、春に異なるコントローラに同じURLをマッピングします。

答えて

3

Springルートに行きたい場合は、hereというHandlerInterceptorをチェックアウトすることができます。インターセプタは、クエリパラメータを見て、別のSimpleUrlMapperで捕捉できるものにリンクをリダイレクトすることができます。

もう1つの方法は、単一のコントローラに送信し、クエリパラメータが "b"の場合にコントローラを別のアクションに転送させることです。

+0

HandlerInterceptorはクールに聞こえますが、当面は第2のアプローチをとると思います。いくつかのパラメータが存在するかどうかを知っていれば、コントローラにチェックを入れる必要があります。だから、if(tag == someValue)なら、xをやるでしょうが、 'tag'という名前のパラメータがない場合には、それをどのように処理するのでしょうか? – r15habh

+0

@kcr:私が質問を理解しているかどうかは分かりませんが、コントローラ内でHttpServletRequestを使用してgetParameterMapを呼び出すと、現在のリクエストのキーと値のマップが得られます。マップを照会して、パラメーターが存在するかどうかを調べることができます。 – rajasaur

+0

私の悪い、間違った方向に考えていた:) – r15habh

5

@RequestMapping注釈のparams属性を使用して、HTTPパラメータに応じてコントローラメソッドを選択できます。

は、この例を参照してください:春ROOが使用するように

@RequestMapping(params = "form", method = RequestMethod.GET) 
public ModelAndView createForm() { 
    ... 
} 

@RequestMapping(method = RequestMethod.GET) 
public ModelAndView list() { 
    ... 
} 

これは、RESTスタイルです:リクエストパラメータformsが含まれている場合ではないlist方法が使用されているならば、createFormハンドラが、使用されています。

+0

良い、それを後で試してみるだろう... @RequestParam(値= "タグ"、必須= false) 「タグ」パラメータのヌル値をチェックする – r15habh

関連する問題