跳到主要内容

@RequestBody

DeepSeek V3 中英对照 @RequestBody

你可以使用 @RequestBody 注解,通过 HttpMessageReader 将请求体读取并反序列化为一个 Object。以下示例展示了一个使用 @RequestBody 参数的例子:

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

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

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

你可以使用 WebFlux 配置 中的 HTTP 消息编解码器 选项来配置或自定义消息读取器。

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

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

你也可以声明一个 Errors 参数来访问验证错误,但在这种情况下,请求体不能是 Mono,并且会首先被解析:

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

如果由于其他参数带有 @Constraint 注解而应用了方法验证,则会抛出 HandlerMethodValidationException 异常。更多详细信息,请参阅 验证 部分。