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

rya*_*ogo 12 java spring spring-mvc

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

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

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

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

Rya*_*art 20

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


Roy*_*ouh 9

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

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

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

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

在你的情况下它发现它...

然后真正的魔法开始......

使用java反射,Spring将解析控制器方法的参数.因此,在您的情况下,Locale和模型将自动传递给您.如果您包含另一个类似Web的参数,例如HttpSession,它将传递给您.