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