@RequestBody
您可以使用 @RequestBody
註解來讀取請求 body,並透過 HttpMessageConverter
將其反序列化為 Object
。以下範例使用 @RequestBody
引數
-
Java
-
Kotlin
@PostMapping("/accounts")
public void handle(@RequestBody Account account) {
// ...
}
@PostMapping("/accounts")
fun handle(@RequestBody account: Account) {
// ...
}
表單資料應使用 @RequestParam 讀取,而不是 @RequestBody ,因為 @RequestBody 並非始終能可靠地使用,因為在 Servlet API 中,請求參數存取會導致請求 body 被解析,且無法再次讀取。 |
您可以將 @RequestBody
與 jakarta.validation.Valid
或 Spring 的 @Validated
註解結合使用,這兩者都會導致應用標準 Bean 驗證。預設情況下,驗證錯誤會導致 MethodArgumentNotValidException
,這會轉為 400 (BAD_REQUEST) 回應。或者,您也可以透過 Errors
或 BindingResult
引數在控制器本地處理驗證錯誤,如下列範例所示
-
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
。如需更多詳細資訊,請參閱關於 驗證 的章節。