15

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

  1. 细绳
  2. 模型
  3. 模型和视图

我不明白这些动作之间的区别。你能给我解释一下吗?

4

3 回答 3

26

在 Spring 3.2.x 中,不仅仅是这 3 个。请参阅Spring 网站上的文档。最新的 Spring (4.2.x)文档

以下是支持的返回类型:

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

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

因此,您必须以某种方式将框架指向View实例或视图的名称,如String返回值中一样(或依赖隐式解析,也许只返回Model);如果您返回一个名称(作为一个名称String或嵌入在 a 中ModelAndView),则该名称将被传递给配置ViewResolver以获取实际View实例。

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

于 2013-09-04T07:12:38.443 回答
0

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

于 2013-09-04T07:16:21.260 回答