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