Spring MVC:将模型作为参数传递给控制器​​方法VS显式实例化它


问题内容

我在MVC Controller课堂上创建了两个测试方法。在第一种方法中,Model将其作为参数传递,在第二种方法中,我直接将其实例化。在这两种方法中,我都向Model实例添加一个属性:

@RequestMapping("/test-modelParam")
public String testMethod1(Model model) {
    model.addAttribute("testname", "testvalue");
    return "/testview";
}


@RequestMapping("/test-modelInstantiatedExplicitly")
public ModelAndView testMethod2() {
    ModelAndView mav = new ModelAndView("/testview");
    mav.addObject("testname", "testvalue");
    return mav;
}

在两种情况下,视图均正确填充。

两种方法之间有什么区别吗?如果是这样,在哪一种情况下最好在另一种情况下使用?


问题答案:

最终,一切都将最终变成ModelAndView最终。

使用ModelModelMap作为方法参数时,它将预先填充一些值

  1. 路径变量
  2. 任何带@ModelAttribute注释的方法的结果
  3. @SessionAttribute控制器可用的任何

简而言之,它是可用于该方法的预填充模型。

Model始终创建并合并添加/用创建一个ModelAndView