返回值

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

控制器方法返回值 描述

@ResponseBody

返回值通过HttpMessageConverter实现转换并写入响应。查看@ResponseBody

HttpEntity<B>, ResponseEntity<B>

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

HttpHeaders

返回具有头信息但没有正文的响应。

ErrorResponse

要呈现带有正文详细信息的RFC 7807错误响应,请参阅错误响应

ProblemDetail

要呈现带有正文详细信息的RFC 7807错误响应,请参阅错误响应

String

要使用ViewResolver实现解析的视图名称,并与隐式模型一起使用,通过命令对象和@ModelAttribute方法确定。处理程序方法还可以通过声明Model参数来以编程方式丰富模型(请参阅显式注册)。

View

要与隐式模型一起使用的View实例,通过命令对象和@ModelAttribute方法确定。处理程序方法还可以通过声明Model参数来以编程方式丰富模型(请参阅显式注册)。

java.util.Map, org.springframework.ui.Model

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

@ModelAttribute

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

@ModelAttribute是可选的。请参阅表末的“任何其他返回值”。

ModelAndView对象

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

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(例如,当底层服务返回其中之一时)。

ResponseBodyEmitter, SseEmitter

异步发出一系列对象以通过HttpMessageConverter实现写入响应。也支持作为ResponseEntity的正文。请参阅异步请求HTTP流式传输

StreamingResponseBody

异步写入响应OutputStream。也支持作为ResponseEntity的正文。请参阅异步请求HTTP流式传输

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

单个值类型,例如Mono,可与返回DeferredResult进行比较。多值类型,例如Flux,根据请求的媒体类型(例如,“text/event-stream”,“application/json+stream”)可能被视为流,否则将被收集到列表并作为单个值呈现。请参阅异步请求响应式类型

其他返回值

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