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


问题内容

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

  1. 模型
  2. 模型和视图

我不了解这些动作之间的差异。你能解释一下吗?


问题答案:

在Spring
3.2.x中,只有3种。请参阅Spring网站上的文档。最新版Spring(4.2.x)文档

以下是受支持的返回类型:

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