@RequestBody
@RequestBody
您可以使用 @RequestBody
注解来读取请求体并通过 HttpMessageConverter 将其反序列化为一个 Object
。以下示例使用了 @RequestBody
参数:
- Java
- Kotlin
@PostMapping("/accounts")
public void handle(@RequestBody Account account) {
// ...
}
@PostMapping("/accounts")
fun handle(@RequestBody account: Account) {
// ...
}
您可以使用 Message Converters 选项的 MVC Config 来配置或自定义消息转换。
备注
表单数据应使用 @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
。有关更多详细信息,请参见 Validation 部分。