Как работает параметр метода Spring MVC-контроллера?

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

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

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

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

Ответ 2

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

В качестве spring DispatcherServlet для каждого отправленного запроса создается и настраивается адаптер Handler.

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

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

В вашем случае он найдет его...

Затем начинается настоящая магия...

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