此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.2.0! |
@RequestBody
您可以使用@RequestBody
注解来读取请求正文并将其反序列化为Object
通过 HttpMessageReader 获取。
以下示例使用@RequestBody
论点:
-
Java
-
Kotlin
@PostMapping("/accounts")
public void handle(@RequestBody Account account) {
// ...
}
@PostMapping("/accounts")
fun handle(@RequestBody account: Account) {
// ...
}
与 Spring MVC 不同,在 WebFlux 中,@RequestBody
method 参数支持响应式类型
以及完全无阻塞的读取和(客户端到服务器)流式处理。
-
Java
-
Kotlin
@PostMapping("/accounts")
public void handle(@RequestBody Mono<Account> account) {
// ...
}
@PostMapping("/accounts")
fun handle(@RequestBody accounts: Flow<Account>) {
// ...
}
您可以使用 WebFlux Config 的 HTTP 消息编解码器选项来 配置或自定义消息阅读器。
您可以使用@RequestBody
与jakarta.validation.Valid
或 Spring 的@Validated
注解,这会导致应用 Standard Bean Validation。验证
错误会导致WebExchangeBindException
,这将产生 400 (BAD_REQUEST) 响应。
异常包含一个BindingResult
替换为错误详细信息,并且可以在
controller 方法,方法是使用 async 包装器声明参数,然后使用 error
相关运算符:
-
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
而是引发。有关更多详细信息,请参阅
部分。