@RequestBody

您可以使用 @RequestBody 註解來讀取請求 body,並透過 HttpMessageConverter 將其反序列化為 Object。以下範例使用 @RequestBody 引數

  • Java

  • Kotlin

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

您可以使用 訊息轉換器選項 的 MVC 配置 來配置或自訂訊息轉換。

表單資料應使用 @RequestParam 讀取,而不是 @RequestBody,因為 @RequestBody 並非始終能可靠地使用,因為在 Servlet API 中,請求參數存取會導致請求 body 被解析,且無法再次讀取。

您可以將 @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。如需更多詳細資訊,請參閱關於 驗證 的章節。