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处理程序方法部分)。