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

v11*_*v11 16 spring

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

@RequestMapping(value="/")
    public ModelAndView mainPage() {
        return new ModelAndView("home");
}
Run Code Online (Sandbox Code Playgroud)

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

@RequestMapping(value="/")
    public String mainPage() {
        return "home";
}
Run Code Online (Sandbox Code Playgroud)

Nie*_*sen 18

你可以从控制器返回很多东西,Spring会自动尝试从那里推断出要做什么.

当您返回ModelAndView时,需要从控制器传递的所有信息都嵌入其中.那里没有惊喜.

如果返回String,则会假定这是要使用的视图的名称.它将它包装在一个ModelAndView对象中,字符串作为视图,嵌入的现有模型也是如此.

Spring在返回类型上做了很多"魔术",但也在参数类型上做了很多.这允许您以更直观的样式编写代码,即以下两个示例相同:

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

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

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