Ответ 1
Общий ответ: "Spring магия"; однако "Поддерживаемые аргументы метода обработчика и возвращаемые типы" в главе MVC справочного руководства Spring приведены точные ответы на ваши вопросы.
Я создал проект Spring MVC с использованием шаблона, созданного из STS, и это то, что генерируется в контроллере:
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
//stuff
}
Мой вопрос: как передать переменную locale
и model
в метод home
?
Кроме того, каковы возможные варианты объектов, которые могут быть переданы методу?
Общий ответ: "Spring магия"; однако "Поддерживаемые аргументы метода обработчика и возвращаемые типы" в главе MVC справочного руководства Spring приведены точные ответы на ваши вопросы.
Технический ответ заключается в использовании механизма SpringMVC HandlerAdapter.
В качестве spring DispatcherServlet для каждого отправленного запроса создается и настраивается адаптер Handler.
Я думаю, что "волшебство spring" в этом случае - это AnnotationMethodHandlerAdapter, расположенный в пакетах spring mvc. Этот адаптер в основном будет "сопоставлен" с HTTP-запросом на основе HTTP-маршрутов, HTTP-методов и параметров запроса, привязанных к запросу.
Так важно, когда сервлет диспетчера spring идентифицирует запрос с помощью пути "/", он проверяет, есть ли в нем методы, аннотированные аннотацией RequestMapping.
В вашем случае он найдет его...
Затем начинается настоящая магия...
Используя java-отражение, spring затем разрешит аргументы вашего метода контроллера. Таким образом, в вашем случае Locale и модель будут автоматически переданы вам. Если вы включили другой веб-параметр, такой как HttpSession, который будет передан вам.