Как работает параметр метода контроллера Spring MVC? - PullRequest
11 голосов
/ 04 декабря 2011

Я создал проект Spring MVC, используя шаблон, созданный из STS, и это то, что генерируется в контроллере:

@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
    //stuff
}

Мой вопрос: как переменные locale и model передаются в метод home?

Кроме того, каковы возможные варианты объектов, которые можно передать в метод?

Ответы [ 2 ]

18 голосов
/ 04 декабря 2011

Общий ответ: «Весенняя магия»; однако «Поддерживаемые аргументы метода обработчика и типы возврата» в главе MVC справочного руководства Spring содержат точные ответы на ваши вопросы.

8 голосов
/ 04 декабря 2011

Технический ответ - использование механизма SpringMVC HandlerAdapter.

Посредством Spring DispatcherServlet для каждого отправленного запроса создается и настраивается адаптер обработчика.

Я думаю, что "магия весны" в этом случае - AnnotationMethodHandlerAdapter, расположенный в пакетах Spring mvc. Этот адаптер в основном будет «сопоставлен» с HTTP-запросом на основе HTTP-путей, HTTP-методов и параметров запроса, связанных с запросом.

Так важно, когда сервлет весеннего диспетчера идентифицирует запрос с путем "/", он проверяет методы в своем контейнере, помеченном аннотацией RequestMapping.

В твоем случае это всё ...

Тогда начинается настоящее волшебство ...

Используя java отражение, Spring затем разрешит аргументы вашего метода контроллера. Таким образом, в вашем случае локаль и модель будут автоматически переданы вам. Если вы включили другой веб-подобный параметр, такой как HttpSession, он будет передан вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...