@RequestBody

您可以使用 @RequestBody 注解,通过 HttpMessageConverter 将请求体读取并反序列化为 Object。 以下示例使用了 @RequestBody 参数:spring-doc.cadn.net.cn

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

您可以使用消息转换器选项(位于MVC 配置中)来配置或自定义消息转换。spring-doc.cadn.net.cn

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

你可以将 @RequestBodyjakarta.validation.Valid 或 Spring 的 @Validated 注解结合使用,这两种方式都会触发标准的 Bean Validation 验证。 默认情况下,验证错误会抛出 MethodArgumentNotValidException 异常,该异常会被转换为 400(BAD_REQUEST)响应。或者,你也可以通过在控制器方法中添加 ErrorsBindingResult 参数来本地处理验证错误, 如下例所示:spring-doc.cadn.net.cn

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

如果由于其他参数带有 @Constraint 注解而应用了方法验证, 则会抛出 HandlerMethodValidationException 异常。更多详情,请参见 验证 章节。spring-doc.cadn.net.cn