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>> 在稍後以非同步方式提供所有三項——響應狀態、頭部資訊和響應體。這使得響應狀態和頭部資訊可以根據非同步請求處理的結果而變化。