Spring MVC控制器方法参数如何工作?

我使用从STS创建的模板创建了一个Spring MVC项目,这是在控制器中生成的:

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

我的问题是, localemodel变量如何传递到home方法?

此外,可以传递给方法的对象有哪些可能的选项?

一般的答案是“spring魔术”; 但是,Spring参考指南的MVC章节中的“支持的处理程序方法参数和返回类型”可以准确回答您的问题。

技术答案是通过使用SpringMVC HandlerAdapter机制。

通过spring的DispatcherServlet,为每个调度的请求创建并配置Handler适配器。

我认为这种情况下的“spring魔术”是位于spring mvc包中的AnnotationMethodHandlerAdapter。 此适配器基本上将“映射”到基于HTTP路径,HTTP方法和与请求关联的请求参数的HTTP请求。

因此,当spring dispatcher servlet使用路径“/”标识请求时,它将检查其容器中使用RequestMapping注释注释的方法。

在你的情况下它发现它…

然后真正的魔法开始……

使用javareflection,Spring将解析控制器方法的参数。 因此,在您的情况下,Locale和模型将自动传递给您。 如果您包含其他类似Web的参数,例如HttpSession,则会传递给您。