我有一个控制器,可以处理几个必须检查是否存在相同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...
}
是否有办法将重复检查提取到某个方法中,该方法将在实际处理程序执行之前进行检查?
感谢。
答案 0 :(得分:2)
如果cookie不存在,您可以使用interceptor来“拦截”请求并处理您的逻辑。您可以在通过 preHandle 方法触发控制器之前将其激活。
答案 1 :(得分:1)
如果有大量的Handler方法,你可以查看Spring的AOP来实现所有方法的cookie检查建议。
http://static.springsource.org/spring/docs/2.5.x/reference/aop.html
答案 2 :(得分:0)
其他答案中建议的AOP拦截器是一种配置过度杀伤。
使用@ModelAttribute注释可以实现类似的功能。从Spring 2.5开始提供。使用@ModelAttribute
注释的方法必须为视图模型生成参数。在使用@RequestMapping
注释的每个方法之前调用这些方法。
如果带注释的方法没有返回任何内容(void-method),它似乎正在工作。在这种情况下,它可以作为一些虚构的“BeforeEveryRequest”注释。它看起来像这样:
@ModelAttribute
public void tagController(HttpServletRequest request) {
request.setAttribute(VERSION_PARAMETER, version());
}
更新:
有一个小的副作用。它为模型添加了一个dummi值。键是一个字符串“void”,值为null
。