在Spring MVC中返回ModelAndView和返回String有什么区别?

时间:2014-09-23 06:37:09

标签: spring

我想知道ModelAndView和String之间的区别。

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

,第二段代码是关于返回String:

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

1 个答案:

答案 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";
}

这第二个变体不那么冗长,更容易单独测试。传入的模型将是一个空模型(除非从其他控制器转发)。