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

© . This site is unofficial and not affiliated with VMware.