@RequestBody
@RequestBody
[参见Reactive栈中的等效内容](../../../webflux controller/ann-methods/requestbody.md)
你可以使用@RequestBody注解,让请求体被读取并反序列化为一个Object,通过HttpMessageConverter实现。以下示例使用了@RequestBody参数:
- Java
- Kotlin
@PostMapping("/accounts")
public void handle(@RequestBody Account account) {
// ...
}
@PostMapping("/accounts")
fun handle(@RequestBody account: Account) {
// ...
}
备注
表单数据应使用@RequestParam来读取,而不是使用@RequestBody,因为@RequestBody并不总是可以可靠地使用。在Servlet API中,访问请求参数会导致请求体被解析,之后就无法再次读取请求体了。
你可以将@RequestBody与jakarta.validation.Valid或Spring的@Validated注解结合使用,这两种方式都会触发标准Bean验证(Standard Bean Validation)的生效。默认情况下,验证错误会引发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异常。有关更多详细信息,请参阅验证章节。