对于最新的稳定版本,请使用 Spring Framework 7.0.6!spring-doc.cadn.net.cn

@RequestBody

您可以使用 @RequestBody 注解来读取和反序列化请求体为一个 对象 通过一个 转换器。 以下示例使用了一个 参数spring-doc.cadn.net.cn

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

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

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

您可以使用 @RequestBody 结合 jakarta.validation.Valid 或 Spring 的 @Validated 注解,这两种方式都会导致 Standard 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