このバージョンはまだ開発中であり、まだ安定しているとは見なされていません。最新の安定バージョンについては、Spring Framework 6.1.14 を使用してください! |
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)
}
The body will usually be provided as a value object to be rendered to a corresponding response representation (for example, JSON) by one of the registered HttpMessageConverters
.
A ResponseEntity<Resource>
can be returned for file content, copying the InputStream
content of the provided resource to the response OutputStream
. Note that the InputStream
should be lazily retrieved by the Resource
handle in order to reliably close it after it has been copied to the response. If you are using InputStreamResource
for such a purpose, make sure to construct it with an on-demand InputStreamSource
(for example, through a lambda expression that retrieves the actual InputStream
). Also, custom subclasses of InputStreamResource
are only supported in combination with a custom contentLength()
implementation which avoids consuming the stream for that purpose.
Spring MVC は、ResponseEntity
を非同期的に生成する単一値のリアクティブ型の使用、および / または本体の単一値および複数値のリアクティブ型の使用をサポートします。これにより、次の型の非同期レスポンスが可能になります。
ResponseEntity<Mono<T>>
またはResponseEntity<Flux<T>>
は、レスポンスステータスとヘッダーをすぐに通知しますが、本文は後の時点で非同期に提供されます。本体が 0..1 値で構成されている場合はMono
を使用し、複数の値を生成できる場合はFlux
を使用します。Mono<ResponseEntity<T>>
は 3 つすべてを提供します — 後の時点で非同期的に、レスポンスステータス、ヘッダー、本文。これにより、非同期リクエスト処理の結果に応じて、レスポンスのステータスとヘッダーを変えることができます。