@RequestBody

您可以使用@RequestBody 注解将请求体读取并反序列化为Object,方法是通过HttpMessageConverter。以下示例使用@RequestBody 参数

  • Java

  • Kotlin

@PostMapping("/accounts")
public void handle(@RequestBody Account account) {
	// ...
}
@PostMapping("/accounts")
fun handle(@RequestBody account: Account) {
	// ...
}

您可以使用消息转换器选项(位于MVC 配置中)来配置或自定义消息转换。

表单数据应该使用@RequestParam读取,而不是使用@RequestBody,因为@RequestBody 无法始终可靠地使用,因为在 Servlet API 中,请求参数访问会导致请求体被解析,并且无法再次读取。

您可以将@RequestBodyjakarta.validation.Valid或Spring的@Validated注解结合使用,这两者都会导致应用标准Bean验证。默认情况下,验证错误会导致MethodArgumentNotValidException,这将转换为400(BAD_REQUEST)响应。或者,您可以通过ErrorsBindingResult参数在控制器中本地处理验证错误,如下例所示

  • 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。有关更多详细信息,请参阅关于验证的部分。