戻り値

次の表は、サポートされているコントローラーメソッドの戻り値を示しています。Reactor、RxJava などのライブラリのリアクティブ型は、通常、すべての戻り値でサポートされていることに注意してください。

Flux のような戻り値の型では、複数の値が予想される場合、要素は到着するとすぐにストリーミングされ、バッファリングされません。これはデフォルトの動作です。大量の要素をメモリ内に保持するのは効率的ではないためです。メディア型が無限のストリームを意味する場合 (たとえば、application/json+stream)、値は個別に書き込まれ、フラッシュされます。それ以外の場合は、値は個別に書き込まれ、フラッシュは個別に行われます。

要素が JSON にエンコードされている間にエラーが発生した場合、レスポンスがすでに書き込まれてコミットされている可能性があり、その時点で適切なエラーレスポンスをレンダリングすることは不可能です。場合によっては、アプリケーションは、要素をバッファリングして一度にエンコードすることにより、メモリ効率を犠牲にしてこのようなエラーをより適切に処理することを選択できます。その後、コントローラーは Flux<List<B>> を返すことができます。Reactor は、そのための専用演算子 Flux#collectList() を提供します。
コントローラーメソッドの戻り値 説明

@ResponseBody

戻り値は、HttpMessageWriter インスタンスを介してエンコードされ、レスポンスに書き込まれます。@ResponseBody を参照してください。

HttpEntity<B>, ResponseEntity<B>

戻り値は、HTTP ヘッダーを含む完全なレスポンスを指定し、本文は HttpMessageWriter インスタンスを介してエンコードされ、レスポンスに書き込まれます。ResponseEntity を参照してください。

HttpHeaders

ヘッダーを含み、本文を含まないレスポンスを返すため。

ErrorResponse

本文に詳細を含む RFC 9457 エラーレスポンスをレンダリングするには、エラーレスポンスを参照してください。

ProblemDetail

本文に詳細を含む RFC 9457 エラーレスポンスをレンダリングするには、エラーレスポンスを参照してください。

String

ViewResolver インスタンスで解決され、暗黙的モデルと一緒に使用されるビュー名。コマンドオブジェクトと @ModelAttribute メソッドによって決定されます。ハンドラーメソッドは、Model 引数 ( 前述 ) を宣言することで、プログラム的にモデルを強化することもできます。

View

暗黙的モデルとともにレンダリングに使用する View インスタンス。コマンドオブジェクトと @ModelAttribute メソッドによって決定されます。ハンドラーメソッドは、Model 引数 ( 前述 ) を宣言することで、プログラム的にモデルを強化することもできます。

java.util.Map, org.springframework.ui.Model

暗黙的なモデルに追加される属性。ビュー名はリクエストパスに基づいて暗黙的に決定されます。

@ModelAttribute

モデルに追加される属性。ビュー名はリクエストパスに基づいて暗黙的に決定されます。

@ModelAttribute はオプションです。この表の後の「その他の戻り値」を参照してください。

Rendering

モデルおよびビューのレンダリングシナリオ用の API。

void

void、おそらく非同期 ( Mono<Void> など) の戻り値の型 (または null 戻り値) を持つメソッドは、ServerHttpResponseServerWebExchange 引数、または @ResponseStatus アノテーションも持っている場合、レスポンスを完全に処理したと見なされます。コントローラーが肯定的な ETag または lastModified タイムスタンプチェックを行った場合も同様です。詳細については、コントローラーを参照してください。

上記のいずれにも当てはまらない場合、void 戻り値の型は、REST コントローラーの「レスポンス本文なし」または HTML コントローラーのデフォルトのビュー名選択を示すこともできます。

Flux<ServerSentEvent>Observable<ServerSentEvent>、その他のリアクティブ型

サーバー送信イベントを発行します。ServerSentEvent ラッパーは、データのみを書き込む必要がある場合は省略できます(ただし、produces 属性を使用してマッピングで text/event-stream をリクエストまたは宣言する必要があります)。

その他の戻り値

戻り値が他の方法で未解決のままである場合、モデル属性として扱われます。ただし、それが BeanUtils#isSimpleProperty (Javadoc) によって決定された単純型である場合は、未解決のままです。