@RequestBody
您可以使用 @RequestBody
注解来读取请求体,并通过 HttpMessageConverter
将其反序列化为 Object
。以下示例使用了 @RequestBody
参数
-
Java
-
Kotlin
@PostMapping("/accounts")
public void handle(@RequestBody Account account) {
// ...
}
@PostMapping("/accounts")
fun handle(@RequestBody account: Account) {
// ...
}
您可以使用 消息转换器 选项来配置或自定义消息转换。
表单数据应使用 @RequestParam 读取,而不是 @RequestBody 。由于在 Servlet API 中,访问请求参数会导致请求体被解析,之后就无法再次读取,因此 @RequestBody 并非总是可靠地用于表单数据。 |
您可以将 @RequestBody
与 jakarta.validation.Valid
或 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
。更多详细信息,请参阅验证部分。