Spring MVC 控制器方法的有效 return 类型是什么?

What are valid return types of a Spring MVC controller method?

我在 Spring MVC 方面经验不多,我对 控制器方法可以 return[=] 的有效 return 类型有以下了解33=].

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

一个控制器class是这样的:

@Controller
public class AccountController {

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

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

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

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

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

您在 doc

中有直接答案

特别注意

If the method is annotated with @ResponseBody, the return type is written to the response HTTP body. The return value will be converted to the declared method argument type using HttpMessageConverters.

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

你可以看看AnnotationMethodHandlerAdapter#getModelAndView。此方法有几个基于 return 类型的条件来选择如何处理 returned 值。

有许多return类型可用于在控制器内部由@RequestMapping注释的Handler方法,例如:

  • ModelAndView (Class)

  • 模型(界面)

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

还有更多......See Docs

每个 return 类型都有其特定用途,例如:如果您使用的是字符串,则表示 return 视图名称,并且此视图名称将由 ViewResolver 解析。如果您不想 return 提及任何视图名称 return,请键入 void。如果您想设置视图名称以及发送一些数据以查看使用 ModelAndView 作为 return 类型。

请仔细阅读文档,您还将了解可以在处理程序方法中传递哪种方法参数。