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(...); }
正如你所看到的,只需将HttpServletRequest
和HttpServletResponse
对象添加到签名中,Spring MVC就可以将这些对象传递给控制器方法。 你也需要HttpSession
对象。
编辑:似乎HttpServletRequest /响应不适用于Spring 3下的某些人。尝试使用Eduardo Zola指出的Spring WebRequest / WebResponse对象。
我强烈build议您查看一下支持的参数列表 ,Spring MVC能够自动将其注入到您的处理程序方法中。
我知道这是一个老问题,但…
你也可以在你的课堂上使用这个:
@Autowired private HttpServletRequest context;
这将提供当前的HttpServletRequest
实例,供您在方法上使用。