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