2012-04-27 6 views
1

httpセッション属性に基づいて@RequestMappingを2つの異なるコントローラメソッドにマップする必要があります。Spring MVCは@RequestMappingアノテーションを使用してhttpsessionパラメータに基づいてURLを照合することができます

@RequestMappingはvalue、method、param、およびheadersに基づいて一致しています。 セッション属性に基づいてマップする方法はありますか?

私がparamを使用している場合、クライアントにリクエストパラメータparam (例:aVersion = 1またはaVersion = 2)を強制的に送信する必要があります。

@RequestMappingをオーバーライドする例がある場合は、あなたは私にそれを指摘できますか?

答えて

1

はい、いいえ。コントローラ内のメソッドにHttpSessionパラメータを追加できます。 Spring MVC documentation

セッションオブジェクト(サーブレットAPI):タイプHttpSession。この型の引数は、対応するセッションの存在を強制します。結果として、そのような議論は決してヌルではない。

ただし、セッションを行う必要があります私の知る限り、手動でチェック属性:あなたの応答のための

@RequestMapping("/some_url") 
void someMethod(HttpSession session) { 

    Object firstAttr = session.getAttribute("firstAttribute"); 
    if (firstAttr != null) { 
     doSomethingWithFirstAttribute(firstAttr); 
    } 

    Object secondAttr = session.getAttribute("secondAttribute"); 
    if (secondAttr != null) { 
     doSomethingWithSecondAttribute(secondAttr); 
    } 
} 
+0

感謝を。私が探していたのは、セッション属性に基づいて@RequestBodyを非直列化することです。私は提案された解決策でそれを行うことはできません。 RequestMappingを拡張しようとしましたが、その設定をプラグインできませんでした。どんな助けもありがとう。 –

+0

[@RequestBody](http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-ann-requestbody)アノテーションは、リクエストの本文をマッピングしますメソッドのパラメータには、私はあなたの例ではうまくいかないと思います。しかし、ボディとセッションの両方をパラメータとして含むメソッドを作成することができます: '@RequestMapping("/some_url ") void someMethod(@RequestBody String body、HttpSessionセッション){ // do stuff } – matsev