Spring MVC控制器返回类型


问题内容

我看过一些示例,其中控制器返回一个String(指示视图)

@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
public String findOwner(@PathVariable String ownerId, Model model) {
  Owner owner = ownerService.findOwner(ownerId);  
  model.addAttribute("owner", owner);  
  return "displayOwner"
}

我还看到了示例,其中控制器返回“ ModelAndView”对象类型

public ModelAndView helloWorld() {
    ModelAndView mav = new ModelAndView();
    mav.setViewName("helloWorld");
    mav.addObject("message", "Hello World!");
    return mav;
}

两者之间有什么区别,我应该使用哪个?无论哪种方式,我都可以解决我的问题。


问题答案:

如果说的是MVC 3,那么两者都是正确的。但是直接返回ModelAndView是旧的方式,而且更加口头上。

如果您仅返回一个字符串(不带@ResponseBody,则为其他字符串),则将该字符串视为视图名称,并且spring将其推入视图解析器-
因此,您不必担心(至少在编写控制器时)
,您将使用哪种类型的视图渲染器(不管是jsp还是velocity,都没有关系)。您仅传播Model实例,然后返回提示该下一步做什么。适当的ModelAndView对象稍后在内部由字符串制成。

通常,Spring
3为您提供了更多的参数和返回类型灵活性(请参见Spring文档中的定义@RequestMapping处理程序方法部分)。