2011-06-11 72 views
1

我有一个控制器处理少量请求,必须检查是否存在相同的cookie值。这意味着在每个请求处理程序中,我必须执行相同的检查。Spring MVC 3控制器请求处理程序通用

@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... 
} 


有没有一种方法来提取重复检查到这一些方法的实际处理程序执行之前,将做检查?

谢谢。

回答

2

你可以使用一个interceptor来......“拦截”请求并处理您的逻辑如果cookie不存在。在通过preHandle方法命中控制器之前,您可以使其燃烧。

API:HandlerInterceptor

+0

谢谢!这看起来像一个解决方案。 – tsinik 2011-06-12 12:55:56

0

AOP拦截器在其他的答案建议是构矫枉过正。

类似的功能可以使用@ModelAttribute注释来实现。它自Spring 2.5起可用。使用@ModelAttribute注解的方法必须为视图模型生成参数。在使用@RequestMapping注解的每种方法之前调用这些方法。

它似乎工作,如果注释的方法返回什么(void-method)。在这种情况下,它可以作为一些假想的“BeforeEveryRequest”注释。它看起来像这样:

@ModelAttribute 
public void tagController(HttpServletRequest request) { 
    request.setAttribute(VERSION_PARAMETER, version()); 
} 

UPDATE: 有一个小的副作用。它为模型增加了一个dummi值。键是一个字符串“void”,值为null

相关问题