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

时间:2011-12-04 03:08:53

标签: java spring spring-mvc

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

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

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

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

2 个答案:

答案 0 :(得分:16)

一般的答案是“春天魔术”;但是,Spring参考指南的MVC章节中的"Supported handler method arguments and return types"可以准确回答您的问题。

答案 1 :(得分:7)

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

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

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

因此,当Spring调度程序servlet使用路径“/”标识请求时,它将检查其容器中使用RequestMapping批注进行注释的方法。

在你的情况下,它找到它......

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

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