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