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 型別非同步生成 ResponseEntity,和/或使用單值和多值 reactive 型別作為響應體。這使得使用 ResponseEntity 可以實現多種非同步響應,如下所示

  • ResponseEntity<Mono<T>>ResponseEntity<Flux<T>> 使得響應狀態和頭資訊立即可知,而響應體則在稍後非同步提供。如果響應體包含 0 到 1 個值,則使用 Mono;如果它可以產生多個值,則使用 Flux

  • Mono<ResponseEntity<T>> 在稍後非同步提供所有三項內容:響應狀態、頭資訊和響應體。這使得響應狀態和頭資訊可以根據非同步請求處理的結果而變化。

  • Mono<ResponseEntity<Mono<T>>>Mono<ResponseEntity<Flux<T>>> 是另一種可能的替代方案,儘管不太常見。它們首先非同步提供響應狀態和頭資訊,然後第二次非同步提供響應體。