ResponseEntity

ResponseEntity 就像 @ResponseBody 一样,但带有状态和标题。例如:

  • Java

  • Kotlin

@GetMapping("/something")
public ResponseEntity<String> handle() {
	String body = ... ;
	String etag = ... ;
	return ResponseEntity.ok().eTag(etag).body(body);
}
@GetMapping("/something")
fun handle(): ResponseEntity<String> {
	val body: String = ...
	val etag: String = ...
	return ResponseEntity.ok().eTag(etag).build(body)
}

WebFlux 支持使用单个值 reactive type 来异步生成 ResponseEntity,和/或主体的单值和多值响应类型。这允许通过 ResponseEntity 产生多种异步响应,如下所示:

  • ResponseEntity&lt;Mono&lt;T&gt;&gt;`或 `ResponseEntity&lt;Flux&lt;T&gt;&gt;`使响应状态和标题在稍后的某个时刻以异步方式提供时立即为人所知。如果 body 由 0..1 值组成,则使用 `Mono;如果它可以产生多个值,则使用 Flux

  • `Mono&lt;ResponseEntity&lt;T&gt;&gt;`稍后以异步方式提供所有三个内容 — 响应状态、标题和 body。这允许响应状态和标题根据异步请求处理的结果而有所不同。

  • `Mono&lt;ResponseEntity&lt;Mono&lt;T&gt;&gt;&gt;`或`Mono&lt;ResponseEntity&lt;Flux&lt;T&gt;&gt;&gt;`是另一种可能的备选方案,尽管不太常见。它们先异步提供响应状态和标头,然后异步提供响应体,再异步地提供响应体。