2011-06-11 113 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

相關問題