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

Posted

技术标签:

【中文标题】@RequestMapping 方法中的 spring mvc 中使用哪种返回类型?【英文标题】:Which return type use in spring mvc in @RequestMapping method? 【发布时间】:2013-09-07 13:46:27 【问题描述】:

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

    字符串 型号 模型和视图

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

【问题讨论】:

【参考方案1】:

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

以下是支持的返回类型:

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于@RequestMapping 方法中的 spring mvc 中使用哪种返回类型?的主要内容,如果未能解决你的问题,请参考以下文章

1.@RequestMapping

@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别

浅谈@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别

@RequestMapping 中的@SessionAtribute 调用问题

注解@RequestMapping 的使用

IE 中的 Spry 菜单栏