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 = ...
val etag = ...
return ResponseEntity.ok().eTag(etag).build(body)
}
通常,響應體將作為一個值物件提供,然後由其中一個已註冊的 HttpMessageConverters 渲染為相應的響應表示形式(例如,JSON)。
可以為檔案內容返回 ResponseEntity<Resource>,將所提供資源的 InputStream 內容複製到響應的 OutputStream。請注意,InputStream 應該透過 Resource 控制代碼延遲檢索,以便在複製到響應後可靠地關閉它。如果您為此目的使用 InputStreamResource,請確保使用按需的 InputStreamSource(例如,透過檢索實際 InputStream 的 lambda 表示式)來構建它。此外,InputStreamResource 的自定義子類僅在與自定義 contentLength() 實現結合使用時才受支援,這樣可以避免為此目的消耗流。
Spring MVC 支援使用單個值的響應式型別來非同步生成 ResponseEntity,和/或使用單個值和多值的響應式型別作為響應體。這允許以下型別的非同步響應
-
ResponseEntity<Mono<T>>或ResponseEntity<Flux<T>>立即公開響應狀態和頭資訊,而響應體則在稍後非同步提供。如果響應體包含 0 到 1 個值,請使用Mono;如果它可以生成多個值,請使用Flux。 -
Mono<ResponseEntity<T>>在稍後非同步提供所有三項內容——響應狀態、頭資訊和響應體。這允許響應狀態和頭資訊根據非同步請求處理的結果而變化。