Jackson JSON
ResponseEntity
類似於 @ResponseBody
,但包含狀態碼和頭部資訊。例如
-
Java
-
要求
@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
。請注意,應由 Resource
控制代碼延遲檢索 InputStream
,以便在將其複製到響應後可靠地關閉它。如果您為此目的使用 InputStreamResource
,請確保使用按需的 InputStreamSource
(例如,透過一個獲取實際 InputStream
的 lambda 表示式)構造它。此外,InputStreamResource
的自定義子類僅在結合自定義 contentLength()
實現時才受支援,後者避免為此目的消費流。
Spring MVC 支援使用單值響應式型別非同步生成 ResponseEntity
,以及/或者使用單值和多值響應式型別作為響應體。這允許以下型別的非同步響應:
-
ResponseEntity<Mono<T>>
或ResponseEntity<Flux<T>>
使響應狀態和頭部資訊立即可知,而響應體在稍後以非同步方式提供。如果響應體包含 0..1 個值,請使用Mono
;如果它可以生成多個值,請使用Flux
。 -
Mono<ResponseEntity<T>>
在稍後以非同步方式提供所有三項——響應狀態、頭部資訊和響應體。這使得響應狀態和頭部資訊可以根據非同步請求處理的結果而變化。