返回值

下表描述了支持的控制器方法返回值。所有返回值都支持响应式类型。

控制器方法返回值 描述

@ResponseBody

返回值通过 HttpMessageConverter 实现进行转换并写入响应。详见 @ResponseBody

HttpEntity<B>ResponseEntity<B>

指定完整响应(包括 HTTP 头和正文)的返回值通过 HttpMessageConverter 实现进行转换并写入响应。详见 ResponseEntity

HttpHeaders

用于返回包含头但不包含正文的响应。

ErrorResponse

要渲染 RFC 9457 错误响应并在正文中包含详细信息,详见 错误响应

ProblemDetail

要渲染 RFC 9457 错误响应并在正文中包含详细信息,详见 错误响应

String

一个视图名称,将通过 ViewResolver 实现进行解析,并与隐式模型(通过命令对象和 @ModelAttribute 方法确定)一起使用。Handler 方法还可以通过声明一个 Model 参数来编程方式丰富模型(详见 显式注册)。

View

一个 View 实例,用于与隐式模型(通过命令对象和 @ModelAttribute 方法确定)一起进行渲染。Handler 方法还可以通过声明一个 Model 参数来编程方式丰富模型(详见 显式注册)。

java.util.Maporg.springframework.ui.Model

要添加到隐式模型中的属性,视图名称通过 RequestToViewNameTranslator 隐式确定。

@ModelAttribute

要添加到模型中的属性,视图名称通过 RequestToViewNameTranslator 隐式确定。

请注意,@ModelAttribute 是可选的。详见本表末尾的“其他返回值”。

ModelAndView 对象

要使用的视图和模型属性,以及可选的响应状态。

FragmentsRenderingCollection<ModelAndView>

用于渲染一个或多个片段,每个片段都有自己的视图和模型。详见 HTML 片段

void

如果一个方法的返回类型为 void(或返回值为 null),并且它包含 ServletResponseOutputStream 参数或 @ResponseStatus 注解,则认为它已完全处理了响应。如果控制器进行了 ETaglastModified 时间戳的肯定性检查(详见 控制器),情况也相同。

如果以上条件都不成立,void 返回类型也可以表示 REST 控制器的“无响应体”或 HTML 控制器的默认视图名称选择。

DeferredResult<V>

从任何线程异步产生任何前面的返回值——例如,作为某些事件或回调的结果。详见 异步请求DeferredResult

Callable<V>

在 Spring MVC 管理的线程中异步产生任何上述返回值。详见 异步请求Callable

ListenableFuture<V>java.util.concurrent.CompletionStage<V>java.util.concurrent.CompletableFuture<V>

DeferredResult 的替代方案,作为一种便利(例如,当底层服务返回其中之一时)。

ResponseBodyEmitterSseEmitter

异步发送对象流,以便使用 HttpMessageConverter 实现写入响应。也支持作为 ResponseEntity 的正文。详见 异步请求HTTP 流

StreamingResponseBody

异步写入响应 OutputStream。也支持作为 ResponseEntity 的正文。详见 异步请求HTTP 流

Reactor 和其他通过 ReactiveAdapterRegistry 注册的响应式类型

单个值类型,例如 Mono,类似于返回 DeferredResult。多个值类型,例如 Flux,可以根据请求的媒体类型(例如 "text/event-stream"、"application/json+stream")被视为流,否则会被收集到 List 中并作为单个值渲染。详见 异步请求响应式类型

其他返回值

如果返回值通过任何其他方式仍未解析,则将其视为模型属性,除非它是通过 BeanUtils#isSimpleProperty 确定的简单类型,在这种情况下它仍未解析。