返回值

下表显示了支持的控制器方法返回值。请注意,来自 Reactor、RxJava 或 其他 等库的响应式类型通常支持所有返回值。

对于像 Flux 这样的返回类型,当预期有多个值时,元素会随到随流,而不会被缓冲。这是默认行为,因为在内存中保留大量元素效率不高。如果媒体类型暗示无限流(例如,application/json+stream),则值会单独写入和刷新。否则,值会单独写入,刷新操作单独进行。

如果元素编码为 JSON 时发生错误,响应可能已经被写入并提交,此时无法渲染正确的错误响应。在某些情况下,应用程序可以选择牺牲内存效率以更好地处理此类错误,方法是缓冲元素并一次性编码它们。控制器可以返回 Flux<List<B>>;Reactor 为此提供了专门的操作符,即 Flux#collectList()
控制器方法返回值 描述

@ResponseBody

返回值通过 HttpMessageWriter 实例编码并写入响应。参见 @ResponseBody

HttpEntity<B>, ResponseEntity<B>

返回值指定完整的响应,包括 HTTP 头,并且正文通过 HttpMessageWriter 实例编码并写入响应。参见 ResponseEntity

HttpHeaders

用于返回带有头但无正文的响应。

ErrorResponse, ProblemDetail

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

字符串

一个视图名称,将通过 ViewResolver 实例解析,并与隐式模型(通过命令对象和 @ModelAttribute 方法确定)一起使用。处理程序方法还可以通过声明 Model 参数(如 前文所述)以编程方式丰富模型。

View

一个 View 实例,将与隐式模型(通过命令对象和 @ModelAttribute 方法确定)一起用于渲染。处理程序方法还可以通过声明 Model 参数(如 前文所述)以编程方式丰富模型。

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

要添加到隐式模型的属性,视图名称根据请求路径隐式确定。

@ModelAttribute

要添加到模型的属性,视图名称根据请求路径隐式确定。

请注意,@ModelAttribute 是可选的。请参见本表后面“任何其他返回值”部分。

渲染

一个用于模型和视图渲染场景的 API。

FragmentsRendering, Flux<Fragment>, Collection<Fragment>

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

void

如果一个方法具有 void 类型,或者可能是异步的(例如 Mono<Void>),或者返回 null,并且它还具有 ServerHttpResponseServerWebExchange 参数或 @ResponseStatus 注解,则认为该方法已完全处理了响应。如果控制器进行了正向 ETag 或 lastModified 时间戳检查,情况也相同。有关详细信息,请参见 控制器

如果以上情况均不属实,void 返回类型对于 REST 控制器也可以表示“无响应体”,对于 HTML 控制器则表示默认视图名称选择。

Flux<ServerSentEvent>Observable<ServerSentEvent> 或其他响应式类型

发出服务器发送事件。当只需要写入数据时,可以省略 ServerSentEvent 包装器(但是,必须通过 produces 属性在映射中请求或声明 text/event-stream)。

其他返回值

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

© . This site is unofficial and not affiliated with VMware.