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

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

  1. 字符串
  2. 型号
  3. 模型和视图

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

【问题讨论】:

    标签: java spring 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】:
        猜你喜欢
        • 1970-01-01
        • 2011-05-23
        • 2014-01-13
        • 2014-01-02
        • 2013-03-30
        • 1970-01-01
        • 2014-08-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多