@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 並非總能可靠使用。 |
您可以將 @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。有關更多詳細資訊,請參閱 驗證 部分。