@RequestBody

@RequestBody アノテーションを使用して、リクエスト本体を読み取り、HttpMessageReader を介して Object にデシリアライズすることができます。次の例では、@RequestBody 引数を使用しています。

  • Java

  • Kotlin

@PostMapping("/accounts")
public void handle(@RequestBody Account account) {
	// ...
}
@PostMapping("/accounts")
fun handle(@RequestBody account: Account) {
	// ...
}

Spring MVC とは異なり、WebFlux では、@RequestBody メソッド引数はリアクティブ型と完全にノンブロッキングの読み取りと (クライアントからサーバーへの) ストリーミングをサポートします。

  • Java

  • Kotlin

@PostMapping("/accounts")
public void handle(@RequestBody Mono<Account> account) {
	// ...
}
@PostMapping("/accounts")
fun handle(@RequestBody accounts: Flow<Account>) {
	// ...
}

WebFlux 構成HTTP メッセージコーデックオプションを使用して、メッセージリーダーを構成またはカスタマイズできます。

@RequestBody を jakarta.validation.Valid または Spring の @Validated アノテーションと組み合わせて使用できます。これにより、標準 Bean 検証が適用されます。検証エラーにより WebExchangeBindException が発生し、400(BAD_REQUEST)レスポンスが発生します。例外には、エラーの詳細を含む BindingResult が含まれており、非同期ラッパーで引数を宣言し、エラー関連の演算子を使用することにより、コントローラーメソッドで処理できます。

  • Java

  • Kotlin

@PostMapping("/accounts")
public void handle(@Valid @RequestBody Mono<Account> account) {
	// use one of the onError* operators...
}
@PostMapping("/accounts")
fun handle(@Valid @RequestBody account: Mono<Account>) {
	// ...
}

検証エラーにアクセスするために Errors パラメーターを宣言することもできますが、その場合、リクエスト本文は Mono であってはならず、最初に解決されます。

  • Java

  • Kotlin

@PostMapping("/accounts")
public void handle(@Valid @RequestBody Account account, Errors errors) {
	// use one of the onError* operators...
}
@PostMapping("/accounts")
fun handle(@Valid @RequestBody account: Mono<Account>) {
	// ...
}

他のパラメーターに @Constraint アノテーションがあるためにメソッド検証が適用される場合は、代わりに HandlerMethodValidationException が発生します。詳細については、検証のセクションを参照してください。