2012-04-27 61 views
1

我需要根据http会话属性将@RequestMapping映射到两个不同的控制器方法。Spring MVC可以使用@RequestMapping注释来匹配基于httpsession参数的url

我看到@RequestMapping基于值,方法,参数和标头进行匹配。 有没有基于会话属性映射的方法?

如果我使用param,我需要强制客户端发送请求参数 例如:aVersion = 1或aVersion = 2。

如果有任何示例覆盖@RequestMapping?你能指点我吗?

回答

1

是和否。您可以在您的控制器中添加HttpSession参数到您的方法。来自Spring MVC documentation

会话对象(Servlet 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,但后来无法插入该配置。任何帮助,将不胜感激。 – 2012-04-30 17:46:36

+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 session){ // do stuff } – matsev 2012-05-01 07:56:29

相关问题