Spring 3 MVC accessing HttpRequest from controller
httprequest, httpsession, request-mapping, spring-mvc
Solution
Spring MVC will give you the HttpRequest if you just add it to your controller method signature:
For instance:
/**
* 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(...);
}
As you see, simply adding the `HttpServletRequest` and `HttpServletResponse` objects to the signature makes Spring MVC to pass those objects to your controller method. You'll want the `HttpSession` object too.
EDIT: It seems that HttpServletRequest/Response are not working for some people under Spring 3. Try using Spring WebRequest/WebResponse objects as Eduardo Zola pointed out.
I strongly recommend you to have a look at the list of supported arguments that Spring MVC is able to auto-magically inject to your handler methods.
Problem
I would like to handle request and session attributes myself rather then leave it to spring `@SessionAttributes`, for login of cookies handling for example. I just cant figure out how could I access the `HttpRequest` from within a controller, I need a way to go a layer above the `@RequestAttribute` and access the `HttpRequest` itself. With Stripes in used to do this by implementing an `ApplicationContext` and calling `getAttribute()`. Also, passing the `HttpServletRequest` as parameter seems not to be working: ``` @RequestMapping(value="/") public String home(HttpServletRequest request){ System.out.println(""+request.getSession().getCreationTime()); return "home"; } ``` The above method does not print anything. Do you have any advice on this?