【问题标题】:What are valid return types of a Spring MVC controller method?Spring MVC 控制器方法的有效返回类型是什么?
【发布时间】:2015-06-04 15:02:36
【问题描述】:

我在 Spring MVC 方面没有太多经验,我有以下关于控制器方法可以返回的有效返回类型是什么

所以我知道用户生成了一个 HttpRequest,由 DispatcherServlet 接收和处理,该 DispatcherServlet 将该请求分派到特定的控制器类。

控制器类是这样的:

@Controller
public class AccountController {

    @RequestMapping("/showAccount")
    public String show(@RequestParam("entityId") long id, Model model) {
        ...
    }

    .......................................
    .......................................
    .......................................
}

所以我知道每个方法都处理一个特定的请求,并且处理的请求由 @RequestMapping 注释指定。

我也知道该方法返回一个 String 对象,它是 逻辑视图名称(然后由 视图解析器解析为渲染视图)

所以,在这个阶段,我认为控制器类的方法只返回 String 对象。但我不确定。也许像这样的方法也可以返回一些不同类型的对象?

【问题讨论】:

标签: java spring spring-mvc model-view-controller annotations


【解决方案1】:

Handler 方法有多种返回类型可用,在控制器内部由@RequestMapping 注释,例如:

  • ModelAndView(类)

  • 模型(接口)

  • 地图
  • 字符串
  • 无效
  • 查看
  • HttpEntity<?>ResponseEntity<?>
  • HttpHeaders

还有更多.....See Docs

每种返回类型都有其特定用途,例如:如果您使用字符串,则表示返回视图名称,此视图名称将由ViewResolver 解析。如果您不想返回任何视图名称,请提及返回类型为void。如果您想设置视图名称以及发送一些数据到视图,请使用ModelAndView 作为返回类型。

请阅读文档,您还将了解可以在处理程序方法中传递什么样的方法参数。

【讨论】:

    【解决方案2】:

    您在doc有直接答案

    特别注意

    如果方法被@ResponseBody注解,返回类型为 写入响应 HTTP 正文。返回值将被转换 使用 HttpMessageConverters 到声明的方法参数类型。

    当方法被 @ResponseBody 注释时,返回类型可以是任何自定义类型,任何 Java pojo,框架将转换为适当的表示 JSON、XML 等并写回到响应体

    【讨论】:

      【解决方案3】:

      您可以查看AnnotationMethodHandlerAdapter#getModelAndView。该方法有几个条件根据返回类型来选择如何处理返回值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-02
        • 2014-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-02
        • 1970-01-01
        • 2016-08-04
        相关资源
        最近更新 更多