@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
方法参数支持反应式类型以及完全非阻塞的读取和(客户端到服务器)流式传输。
-
Java
-
Kotlin
@PostMapping("/accounts")
public void handle(@RequestBody Mono<Account> account) {
// ...
}
@PostMapping("/accounts")
fun handle(@RequestBody accounts: Flow<Account>) {
// ...
}
您可以使用HTTP 消息编解码器选项WebFlux 配置来配置或自定义消息读取器。
您可以将@RequestBody
与jakarta.validation.Valid
或 Spring 的@Validated
注解结合使用,这会导致应用标准 Bean 验证。验证错误会导致WebExchangeBindException
,这会导致 400(BAD_REQUEST)响应。异常包含一个带有错误详细信息的BindingResult
,可以通过使用异步包装器声明参数并在控制器方法中处理它,然后使用与错误相关的运算符
-
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
。有关更多详细信息,请参阅有关验证的部分。