@RequestBody
与 @RequestBody
配合使用的是 @IsValid
注释,它会应用 Bean 验证,验证失败会导致 400 响应。此外,可以使用 Errors
参数在控制器中本地处理验证错误。
可以使用 @RequestBody
注释将请求主体读取并反序列化到 Object
中,通过 xref:integration/rest-clients.adoc#rest-message-conversion[HttpMessageConverter
完成。以下示例使用 @RequestBody
参数:
-
Java
-
Kotlin
@PostMapping("/accounts")
public void handle(@RequestBody Account account) {
// ...
}
@PostMapping("/accounts")
fun handle(@RequestBody account: Account) {
// ...
}
可以使用 MVC Config 的 Message Converters 选项配置或定制消息转换。
你可以在与 jakarta.validation.Valid
结合使用 @RequestBody
或使用 Spring 的 @Validated
注解,这两个都会导致标准 Bean 验证被应用。默认情况下,验证错误会导致 MethodArgumentNotValidException
,它会被转换为 400 (BAD_REQUEST) 响应。另外,你可以在控制器中通过 Errors
或 BindingResult
参数本地处理验证错误,如下例所示:
-
Java
-
Kotlin
@PostMapping("/accounts")
public void handle(@Valid @RequestBody Account account, Errors errors) {
// ...
}
@PostMapping("/accounts")
fun handle(@Valid @RequestBody account: Account, errors: Errors) {
// ...
}
如果方法验证适用,因为其他参数具有 @Constraint
注释,则会改为引发 HandlerMethodValidationException
。有关更多详细信息,请参阅 Validation 部分。