Spring 3 MVC, получающий HttpRequest от контроллера
Я хотел бы обработать атрибуты запроса и сеанса, а затем оставить его spring @SessionAttributes
, например, для входа в систему обработки файлов cookie.
Я просто не могу понять, как я могу получить доступ к HttpRequest
изнутри контроллера, мне нужно сделать слой выше @RequestAttribute
и получить доступ к HttpRequest
самому. С помощью Stripes, используемого для этого, реализуя ApplicationContext
и вызывающий getAttribute()
.
Кроме того, передача параметра HttpServletRequest
как, кажется, не работает:
@RequestMapping(value="/") public String home(HttpServletRequest request){
System.out.println(""+request.getSession().getCreationTime());
return "home";
}
Вышеуказанный метод ничего не печатает.
Есть ли у вас какие-либо советы по этому поводу?
Ответы
Ответ 1
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/Response не работают для некоторых людей под Spring 3. Попробуйте использовать объекты Spring WebRequest/WebResponse, как указал Эдуардо Зола.
Я настоятельно рекомендую вам взглянуть на список поддерживаемых аргументов, которые Spring MVC может автоматически вводить в ваши методы-обработчики.
Ответ 2
Я знаю, что это старый вопрос, но...
Вы также можете использовать это в своем классе:
@Autowired
private HttpServletRequest context;
И это предоставит текущий экземпляр HttpServletRequest
для использования в вашем методе.
Ответ 3
@RequestMapping(value="/") public String home(HttpServletRequest request){
System.out.println("My Attribute :: "+request.getAttribute("YourAttributeName"));
return "home";
}