我想知道ModelAndView和String之间的区别。
@RequestMapping(value="/")
public ModelAndView mainPage() {
return new ModelAndView("home");
}
,第二段代码是关于返回String:
@RequestMapping(value="/")
public String mainPage() {
return "home";
}
答案 0 :(得分:16)
你可以从控制器返回很多东西,Spring会自动尝试从那里推断出要做的事情。
当您返回ModelAndView时,需要从控制器传递的所有信息都嵌入其中。那里并不令人惊讶。
如果返回String,则会假定这是要使用的视图的名称。它将它包装在一个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";
}
这第二个变体不那么冗长,更容易单独测试。传入的模型将是一个空模型(除非从其他控制器转发)。