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

Ato*_*her 4 java spring spring-mvc

我在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;
}
Run Code Online (Sandbox Code Playgroud)

在两种情况下都会正确填充视图.

这两种方法有什么区别吗?如果是这样,在哪里使用一个而不是另一个?

M. *_*num 5

最终没有任何区别,一切都将ModelAndView最终落到最后.

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

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

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

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