此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10spring-doc.cadn.net.cn

@RequestBody

您可以使用@RequestBody注释,让请求正文读取并反序列化为Object通过 HttpMessageReader。 以下示例使用@RequestBody论点:spring-doc.cadn.net.cn

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

与 Spring MVC 不同,在 WebFlux 中,@RequestBodymethod 参数支持响应式类型 以及完全无阻塞的读取和(客户端到服务器)流式传输。spring-doc.cadn.net.cn

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

您可以使用 WebFlux ConfigHTTP 消息编解码器选项来 配置或自定义消息阅读器。spring-doc.cadn.net.cn

您可以使用@RequestBody结合使用jakarta.validation.Valid或 Spring 的@Validated注释,这会导致应用标准 Bean 验证。验证 错误会导致WebExchangeBindException,这会导致 400 (BAD_REQUEST) 的响应。 异常包含一个BindingResult,并且可以在 controller 方法,方法是使用异步包装器声明参数,然后使用 error 相关运营商:spring-doc.cadn.net.cn

@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,并将首先解决:spring-doc.cadn.net.cn

@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而是被提高。有关更多详细信息,请参阅 验证部分。spring-doc.cadn.net.cn