如何解决Spring MVC 3控制器请求处理程序通用
| 我有一个控制器,可以处理很少的请求,这些请求必须检查是否存在相同的cookie值。这意味着在每个请求处理程序中,我必须执行相同的检查。@Controller
public class MyController {
@RequestMapping(\"/Path\")
public String Handler1(@CookieValue(required = false,value = \"Cookie\") String cookie) {
if (cookie != null) {
handleNoCookie();
}
handleRequest1();
}
@RequestMapping(\"/AnotherPath\")
public String Handler2(@CookieValue(required = false,value = \"Cookie\") String cookie) {
if (cookie != null) {
handleNoCookie();
}
handleRequest2();
}
and so on...
}
有没有一种方法可以将重复的检查提取到某种在实际处理程序执行之前执行检查的方法?
谢谢。
解决方法
如果cookie不存在,您可以使用拦截器来... \“拦截\”请求并处理您的逻辑。您可以通过preHandle方法触发控制器之前触发它。
API:HandlerInterceptor
, 如果有大量的Handler方法,则可以研究Spring的AOP为所有方法实现cookie检查建议。
http://static.springsource.org/spring/docs/2.5.x/reference/aop.html
, 其他答案中建议的AOP拦截器是配置过大的杀伤力。
使用@ModelAttribute批注可以实现类似的功能。从Spring 2.5开始可用。使用ѭ1注释的方法必须为视图模型生成参数。在使用
@RequestMapping
注释的每个方法之前,都将调用这些方法。
如果带注释的方法不返回任何内容(无效方法),这似乎是可行的。在这种情况下,它充当一些假想的“ BeforeEveryRequest \”注释。看起来像这样:
@ModelAttribute
public void tagController(HttpServletRequest request) {
request.setAttribute(VERSION_PARAMETER,version());
}
更新:
有一个小的副作用。它为模型添加了一个dummi值。键是字符串“ void”,值为null
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。