2014-09-23 1136 views
7

我想知道ModelAndView和String之間的不同。在Spring MVC中返回ModelAndView和返回String有什麼區別?

@RequestMapping(value="/") 
    public ModelAndView mainPage() { 
     return new ModelAndView("home"); 
} 

和代碼的第二部分是關於返回字符串:

@RequestMapping(value="/") 
    public String mainPage() { 
     return "home"; 
} 
+1

http://docs.spring.io/spring/docs/4.1.x/spring-framework-reference/html/mvc.html#mvc-ann-return-types – 2014-09-23 06:39:22

+0

您也可以參考下面的答案: http://stackoverflow.com/questions/7175509/which-is-better-return-modelandview-or-string-on-spring3-controller – 2015-04-04 15:44:31

回答

9

您可以從控制器返回許多事情,Spring會自動嘗試推斷出從那裏做。

當您返回ModelAndView時,需要從控制器傳遞的所有信息都嵌入其中。那裏沒有驚喜。

如果您返回一個字符串,它會假定這是要使用的視圖的名稱。它將包含在一個ModelAndView對象中,其中字符串作爲視圖並嵌入現有模型。

Spring在返回類型上做了很多'魔術',但也在參數類型上做了許多'魔術'。 這可以讓你的風格,是給你更直觀的編寫代碼,即下面的兩個例子是相同的:

@RequestMapping(value="/") 
public ModelAndView mainPage() { 
    Model m = new Model(); 
    m.put("key", "value"); 
    return new ModelAndView(m,"main"); 
} 

@RequestMapping(value="/") 
public String mainPage(Model m) { 
    m.put("key", "value"); 
    return "main"; 
} 

這第二個變體是一個小更簡潔和更容易分開測試。傳入的模型將是一個空模型(除非從其他控制器轉發)。

相關問題