2011-12-04 69 views
10

我使用從STS創建的模板創建一個Spring MVC項目,這是在控制器產生:Spring MVC控制器方法參數如何工作?

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

我的問題是,如何在localemodel可變獲得通過到home方法?

此外,可以傳遞給該方法的對象有哪些可能的選項?

回答

7

技術答案是通過使用SpringMVC HandlerAdapter機制。

通過Spring的DispatcherServlet,爲每個調度的請求創建並配置Handler適配器。

我覺得這個例子中的「spring magic」是位於spring mvc包中的AnnotationMethodHandlerAdapter。該適配器基本上將被映射到基於與請求綁定的HTTP路徑,HTTP方法和請求參數的HTTP請求。

因此,當Spring調度程序servlet識別帶有路徑「/」的請求時,它將檢查使用RequestMapping註釋標註的容器中的方法。

在你的情況下,發現這樣...

然後真正的魔力開始......

使用Java反射機制,Spring會再解決您的控制器方法的參數。所以在你的情況下,語言環境和模型會自動傳遞給你。如果你包含另一個像參數的網絡,比如HttpSession,它會傳遞給你。