Spring 3 MVC从控制器访问HttpRequest

我想自己处理请求和会话属性,而不是把它留给Spring @SessionAttributes ,例如用于logincookie处理。

我只是无法弄清楚如何从控制器内部访问HttpRequest ,我需要一种方法去@RequestAttribute上方的一层,并访问HttpRequest本身。 在Stripes中通过实现一个ApplicationContext并调用getAttribute()来完成此操作。

此外,传递HttpServletRequest参数似乎不工作:

 @RequestMapping(value="/") public String home(HttpServletRequest request){ System.out.println(""+request.getSession().getCreationTime()); return "home"; } 

上面的方法不打印任何东西。

你有什么build议吗?

Spring MVC会给你HttpRequest,如果你只是把它添加到你的控制器方法签名:

例如:

 /** * Generate a PDF report... */ @RequestMapping(value = "/report/{objectId}", method = RequestMethod.GET) public @ResponseBody void generateReport( @PathVariable("objectId") Long objectId, HttpServletRequest request, HttpServletResponse response) { // ... // Here you can use the request and response objects like: // response.setContentType("application/pdf"); // response.getOutputStream().write(...); } 

正如你所看到的,只需将HttpServletRequestHttpServletResponse对象添加到签名中,Spring MVC就可以将这些对象传递给控制器​​方法。 你也需要HttpSession对象。

编辑:似乎HttpServletRequest /响应不适用于Spring 3下的某些人。尝试使用Eduardo Zola指出的Spring WebRequest / WebResponse对象。

我强烈build议您查看一下支持的参数列表 ,Spring MVC能够自动将其注入到您的处理程序方法中。

我知道这是一个老问题,但…

你也可以在你的课堂上使用这个:

 @Autowired private HttpServletRequest context; 

这将提供当前的HttpServletRequest实例,供您在方法上使用。