对于最新稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

@RequestBody

您可以使用 @RequestBody 注解,通过 HttpMessageReader 读取请求体并将其反序列化为一个 ../../reactive-spring.html#webflux-codecs。 以下示例使用了一个 @RequestBody 参数:spring-doc.cadn.net.cn

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

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

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

您可以使用HTTP 消息编解码器选项(位于WebFlux 配置中)来配置或自定义消息读取器。spring-doc.cadn.net.cn

你可以将 @RequestBodyjakarta.validation.Valid 或 Spring 的 @Validated 注解结合使用,从而触发标准的 Bean Validation 验证。验证错误会引发一个 WebExchangeBindException 异常,导致返回 400(BAD_REQUEST)响应。该异常包含一个带有错误详情的 BindingResult,可以在控制器方法中通过声明一个异步包装器类型的参数,然后使用与错误处理相关的操作符来处理该异常: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>) {
	// ...
}