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 の 1 つによって対応するレスポンス表現 (JSON など) にレンダリングされる値オブジェクトとして提供されます。

ファイルコンテンツに対して ResponseEntity<Resource> を返すことができ、提供されたリソースの InputStream コンテンツをレスポンス OutputStream にコピーします。レスポンスにコピーされた後、確実に閉じるためには、InputStream を Resource ハンドルで遅延取得する必要があることに注意してください。このような目的で InputStreamResource を使用する場合は、オンデマンド InputStreamSource を使用して構築するようにしてください (たとえば、実際の InputStream を取得するラムダ式を使用)。また、InputStreamResource のカスタムサブクラスは、その目的でストリームを消費しないようにするカスタム contentLength() 実装との組み合わせでのみサポートされます。

Spring MVC は、ResponseEntity を非同期的に生成する単一値のリアクティブ型の使用、および / または本体の単一値および複数値のリアクティブ型の使用をサポートします。これにより、次の型の非同期レスポンスが可能になります。

  • ResponseEntity<Mono<T>> または ResponseEntity<Flux<T>> は、レスポンスステータスとヘッダーをすぐに通知しますが、本文は後の時点で非同期に提供されます。本体が 0..1 値で構成されている場合は Mono を使用し、複数の値を生成できる場合は Flux を使用します。

  • Mono<ResponseEntity<T>> は 3 つすべてを提供します — 後の時点で非同期的に、レスポンスステータス、ヘッダー、本文。これにより、非同期リクエスト処理の結果に応じて、レスポンスのステータスとヘッダーを変えることができます。