对于最新的稳定版本,请使用 Spring Framework 6.2.0spring-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

您可以使用@RequestBodyjakarta.validation.Valid或 Spring 的@Validated注解,这会导致应用 Standard Bean Validation。验证 错误会导致WebExchangeBindException,这将产生 400 (BAD_REQUEST) 响应。 异常包含一个BindingResult替换为错误详细信息,并且可以在 controller 方法,方法是使用 async 包装器声明参数,然后使用 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>) {
	// ...
}