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 註解則不是這樣。