在@RequestMapping方法中使用spring mvc中的哪种返回类型?

我知道在Spring的mvc中@RequestMapping方法中的@Controller类我可以返回

  1. 模型
  2. 的ModelAndView

我不明白这些行为之间的差异。 你能解释一下吗?

在Spring 3.2.x中,还有更多只有那些3.请参阅Spring网站上的文档。 Latests Spring(4.2.x) 文档 。

以下是支持的返回类型:

  • 一个ModelAndView对象,该模型隐式地丰富了命令对象和@ModelAttribute注释引用数据访问器方法的结果。
  • 一个Model对象,其视图名称通过RequestToViewNameTranslator隐式确定,并且模型隐式地使用命令对象和@ModelAttribute注释的引用数据访问器方法的结果。
  • 用于公开模型的Map对象,其中视图名称通过RequestToViewNameTranslator隐式确定,模型隐式地使用命令对象和@ModelAttribute注释的引用数据访问器方法的结果。
  • 一个View对象,模型通过命令对象和@ModelAttribute注释的引用数据访问器方法隐式确定。 处理程序方法还可以通过声明Model参数(参见上文)以编程方式丰富模型。
  • 一个String值,它被解释为逻辑视图名称,模型通过命令对象和@ModelAttribute注释的引用数据访问器方法隐式确定。 处理程序方法还可以通过声明Model参数(参见上文)以编程方式丰富模型。
  • 如果方法处理响应本身(通过直接编写响应内容,为此目的声明类型为ServletResponse / HttpServletResponse的参数)或者如果视图名称应该通过RequestToViewNameTranslator隐式确定(未在此处声明响应参数),则返回void处理程序方法签名)。
  • 如果使用@ResponseBody注释该方法,则将返回类型写入响应HTTP正文。 返回值将使用HttpMessageConverters转换为声明的方法参数类型。 请参阅“使用@ResponseBody注释映射响应正文”一节。
  • 一个HttpEntity **或** ResponseEntity对象,用于提供对Servlet响应HTTP头和内容的访问。 使用HttpMessageConverters将实体主体转换为响应流。 请参阅“使用HttpEntity”一节。
  • 当应用程序想要在Spring MVC管理的线程中异步生成返回值时,可以返回Callable
  • 当应用程序想要从自己选择​​的线程生成返回值时,可以返回DeferredResult
  • 任何其他返回类型都被视为要向视图公开的单个模型属性,使用在方法级别通过@ModelAttribute指定的属性名称(或基于返回类型类名称的默认属性名称)。 该模型隐含地使用命令对象和@ModelAttribute注释的引用数据访问器方法的结果进行了丰富。

除非您的返回类型为void或使用@ResponseBody注释您的方法, @ResponseBody Spring MVC将尝试解析View以呈现响应。

因此,您必须以某种方式将框架指向View实例或将视图的名称指向返回值中的String (或依赖于隐式解析并且可能仅返回Model ); 如果返回一个名称(仅作为String或嵌入在ModelAndView ),则会将其传递给已配置的ViewResolver以获取实际的View实例。

ModelAndView容器确实包含对View或视图名称的引用,并且还嵌入要使用的模型。

一切都在文档中: http : //static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-ann-return-types