知識庫 / Spring / Spring MVC RSS 訂閱

使用 Spring @ResponseStatus 設置 HTTP 狀態碼

REST,Spring MVC
HongKong
12
03:53 AM · Dec 06 ,2025

1. 引言

在 Spring MVC 中,有多種方法可以設置 HTTP 響應的狀態碼

在本簡短教程中,我們將看到最直接的方法:使用 @ResponseStatus 註解。

2. 關於控制器方法

當端點成功返回時,Spring 提供 HTTP 200 (OK) 響應。

如果我們想指定 控制器方法的響應狀態,我們可以使用 @ResponseStatus 標記該方法。它有兩個可互換的參數,用於指定所需的響應狀態:codevalue。例如,我們可以引用 指示服務器拒絕為茶壺提供咖啡,因為它是茶壺

@ResponseStatus(HttpStatus.I_AM_A_TEAPOT)
void teaPot() {}

當我們需要指示錯誤時,可以通過將錯誤消息提供給 reason 參數:

@ResponseStatus(HttpStatus.BAD_REQUEST, reason = "Some parameters are invalid")
void onIllegalArgumentException(IllegalArgumentException exception) {}

請注意,當設置 reason 時,Spring 會調用 HttpServletResponse.sendError()。因此,它會向客户端發送一個 HTML 錯誤頁面,這使得它不適合 REST 端點

另外請注意,Spring 僅在 @ResponseStatus 被使用時,標記的方法成功完成(且沒有拋出異常)

3. 使用錯誤處理程序

我們有三種方法可以使用 <em/>@ResponseStatus</em/> 將 `Exception</em/> 轉換為 HTTP 響應狀態:

  • 使用 `@ExceptionHandler
  • 使用 `@ControllerAdvice
  • 標記 `Exception

為了使用前兩種解決方案,我們必須定義一個錯誤處理方法。您可以在這篇文章中瞭解更多相關信息。

我們可以使用 <em/>@ResponseStatus</em/> 與這些錯誤處理方法以與之前章節中常規 MVC 方法相同的方式配合使用。

當不需要動態錯誤響應時,最直接的解決方案是第三種:使用 <em/>@ResponseStatus</em/> 標記 `Exception</em/> 類。

@ResponseStatus(code = HttpStatus.BAD_REQUEST)
class CustomException extends RuntimeException {}

當Spring捕獲到該Exception時,它會使用我們在@ResponseStatus中提供的設置。

請注意,當我們用@ResponseStatus標記一個Exception類時,Spring總是會調用HttpServletResponse.sendError(),無論我們是否設置了reason

此外,請注意,Spring會使用相同的配置用於子類,除非我們也將它們標記為@ResponseStatus

4. 結論

在本文中,我們瞭解到如何使用 @ResponseStatus 在不同場景中設置 HTTP 響應代碼,包括錯誤處理。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.