@RequestBody

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

  • Java

  • Kotlin

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

您可以使用 消息转换器 选项通过 MVC 配置 来配置或自定义消息转换。

表单数据应使用 @RequestParam 读取,而不是 @RequestBody,因为在 Servlet API 中,请求参数访问会导致请求正文被解析,之后就不能再次读取,因此 @RequestBody 并非总能可靠使用。

您可以将 @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。有关更多详细信息,请参阅 验证 部分。

© . This site is unofficial and not affiliated with VMware.