@RequestBody

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

  • Java

  • Kotlin

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

您可以使用 訊息轉換器 選項來配置或自定義訊息轉換。

表單資料應使用 @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。更多詳細資訊,請參閱驗證部分。