Spring 中 @Controller 和 @RestController 註解的區別


Spring 註解可以被視為元資料,提供與程式相關的資訊。程式的補充資訊可以從註解中獲取。註解不會影響程式,也不會改變編譯後程序的動作。Spring 註解有兩種型別,分別是 @Controller 和 @RestController。在本文中,我們將瞭解 @Controller 和 @RestController 之間的區別。

什麼是 @Controller 註解?

Spring @Controller 註解用於告知某個特定類可以作為控制器。@Controller 註解和帶註解的處理器方法基於 @RequestMapping 註解組合使用。@Controller 註解只能用於類,不能用於其他任何實體。此註解可以成功地與 Spring MVC 應用程式一起使用。

什麼是 @RestController 註解?

RestController 用於透過 @RestController 註解開發 RESTful Web 服務。此註解可以在類級別使用,負責處理客戶端發出的請求。它能夠處理以下請求:

  • GET
  • POST
  • DELETE
  • PUT

@Controller 和 @RestController 的區別

可以在下表中找到 @Controller 和 @RestController 之間的區別:

@Controller @RestController
@Controller 可以作為 Spring MVC 控制器。 @RestController 用於 RESTful Web 服務。它透過將 @Controller 註解與 @ResponseBody 註解組合使用來工作。
@Controller 註解是 @Component 註解的特殊版本之一。 @RestController 是 @Controller 註解的專門版本。
@Controller 註解可以返回 Spring MVC 中的檢視。 @RestController 註解不能返回任何檢視。
@Controller 註解可用於類,表示該類是一個控制器。 @RestController 也用於類,表示該類是一個控制器。預設情況下,這些類中使用了 @RequestMapping 和 @ResponseBody。
必須將 @ResponseBody 方法用作處理器方法。 並非每個處理器方法都使用 @ResponseBody 方法。
@Controller 在 Spring 2.5 版本中推出。 @RestController 在 Spring 4.0 版本中推出。
@Controller 用於在 MVC 中定義控制器元件。 @RestController 可以使用 @Controller 和 @ResponseBody 自身註解。
@Controller 用於為 Web 應用程式返回檢視。 @RestController 用於 RESTful Web 服務,資料以 JSON 或 XML 格式返回。
@Controller 支援檢視解析。這有助於返回 ViewResolver 可以解析的檢視。 不支援檢視解析。
@Controller 能夠返回任何型別的內容,但需要顯式註解才能以 XML 或 JSON 格式返回資料。 它僅生成 JSON 和 XML 響應。
為了包含相關標頭,必須顯式包含 @ResponseBody。 它會自動包含標頭,並指示其要提供的響應型別。

@Controller 和 @RestController 程式碼片段的區別

以下是程式碼片段的區別。

@Controller

@Controller
@ResponseBody
Public class MyController {
   Code snippet
}

@RestController

@RestController
Public class MyRestController {
   Code snippet
}

結論

@Controller 和 @RestController 是 Spring 的註解。@Controller 用於基於 Spring MVC 的應用程式。@RestController 以 JSON 或 XML 格式提供輸出,用於 RESTful API。這兩種註解都具有不同的功能,將它們彼此區分開來。

@Controller 與 @RestController 常見問題解答

1. 可以使用 @Controller 註解構建 REST API 嗎?

可以!@Controller 可以用於建立 REST API。在這種情況下,每個方法都必須返回響應體,並且應該使用 @ResponseBody 進行註解。如果不使用 @ResponseBody,Spring MVC 將把方法的返回值解釋為檢視名稱,但不會將任何資料寫入響應體。

2. @Controller 和 @RestController 哪個更好?

@RestController 似乎更好,因為它以 JSON 或 XML 格式提供資料。使用 @RestController 開發 RESTful API 也變得更加簡單。@RestController 還能夠自動使用 @ResponseBody。

3. @RestController 可以替換 @Controller 嗎?

如果要建立 RESTful 服務,則 @RestController 可以替換 @Controller。在其他情況下,這兩種註解都具有不同的功能。@Controller 用於基於 Spring MVC 的應用程式。

4. 可以使用 @Component 替換 @Controller 嗎?

如果要使用 Web 特定的功能,則 @Controller 是更好的選擇,因為此註解是為 Web 層元件開發的。@Controller 能夠輕鬆處理 HTTP 請求。

5. @Controller 和 @RestController 的主要區別是什麼?

@RestController 自動使用 @ResponseBody,而 @Controller 註解則不是這樣。

更新於:2024-07-22

308 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告