Springboot中Controller和RestController的使用及區(qū)別
更新時間:2025年11月21日 09:59:15 作者:IT小鳥鳥
文章總結(jié)了Spring框架中@Controller和@RestController的區(qū)別,包括它們的用途、工作機制、使用場景以及底層原理,文章指出,@Controller用于傳統(tǒng)的SpringMVC應用,返回視圖或數(shù)據(jù)(需@ResponseBody)
在 Spring 框架中,@Controller 和 @RestController 是用于處理 HTTP 請求的注解,但它們的用途和行為有顯著區(qū)別:
1. 核心區(qū)別
@Controller
- 用于傳統(tǒng)的 Spring MVC 應用,通常返回視圖(View)(如 JSP、Thymeleaf 等)。
- 若需要返回數(shù)據(jù)(如 JSON/XML),需額外使用
@ResponseBody注解。
@RestController
- 是 Spring 4.0 引入的注解,專門用于構(gòu)建 RESTful Web 服務(wù),直接返回數(shù)據(jù)(JSON/XML)。
- 它本質(zhì)上是
@Controller+@ResponseBody的組合,自動將返回值序列化為 HTTP 響應體。
2. 工作機制對比
@Controller
- 默認假設(shè)方法返回的是視圖名稱(View Name),由
ViewResolver解析為具體頁面。 - 若要返回數(shù)據(jù),需在方法上添加
@ResponseBody,此時會通過HttpMessageConverter將返回值轉(zhuǎn)換為指定格式(如 JSON)。
@Controller
public class MyController {
@GetMapping("/page")
public String showPage() {
return "home"; // 返回視圖 home.jsp(或類似)
}
@ResponseBody
@GetMapping("/data")
public User getUser() {
return new User("Alice"); // 返回 JSON 數(shù)據(jù)
}
}@RestController
- 所有方法默認添加了
@ResponseBody,直接返回數(shù)據(jù),無需視圖解析。 - 適合 API 開發(fā),不涉及頁面渲染。
@RestController
public class MyRestController {
@GetMapping("/api/user")
public User getUser() {
return new User("Bob"); // 自動轉(zhuǎn)換為 JSON
}
}3. 使用場景
@Controller
- 適用于需要混合視圖和少量數(shù)據(jù)返回的傳統(tǒng) Web 應用(如前后端未分離的場景)。
@RestController
- 專為 RESTful API 設(shè)計,適用于前后端分離架構(gòu),僅返回數(shù)據(jù)(如 JSON/XML)。
4. 底層原理
- @Controller 依賴
ViewResolver解析視圖,而 @RestController 依賴HttpMessageConverter轉(zhuǎn)換數(shù)據(jù)。 - @RestController 的源碼定義如下,可以看出它是
@Controller的增強版:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {}總結(jié)
| 特性 | @Controller | @RestController |
|---|---|---|
| 返回類型 | 視圖(默認)或數(shù)據(jù)(需 @ResponseBody) | 直接返回數(shù)據(jù) |
| 適用場景 | 傳統(tǒng) MVC 頁面渲染 | RESTful API |
| 依賴組件 | ViewResolver | HttpMessageConverter |
| 注解組合 | 無 | @Controller + @ResponseBody |
根據(jù)項目需求選擇注解:
需要頁面渲染用 @Controller,純 API 服務(wù)用 @RestController。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- SpringBoot @RestController注解用法及說明
- SpringBoot中@RestControllerAdvice 全局異常處理的實現(xiàn)
- springboot的統(tǒng)一異常處理,使用@RestControllerAdvice詳解
- SpringBoot項目中@RestControllerAdvice全局異常失效問題的解決
- springboot中@RestController注解實現(xiàn)
- SpringBoot使用@RestController處理GET和POST請求的代碼詳解
- SpringBoot中@RestControllerAdvice @ExceptionHandler異常統(tǒng)一處理類失效原因分析
相關(guān)文章
Java Buffer緩沖區(qū)操作與內(nèi)存管理最佳實踐
Java NIO的Buffer是數(shù)據(jù)容器,管理堆/堆外內(nèi)存,具備position、limit、capacity三大屬性,支持讀寫切換,直接緩沖區(qū)I/O快但創(chuàng)建較慢,非直接緩沖區(qū)更易管理,根據(jù)場景選擇合適類型以優(yōu)化性能,本文給大家介紹Java Buffer緩沖區(qū)操作與內(nèi)存管理最佳實踐,感興趣的朋友一起看看吧2025-09-09
淺談SpringMVC中Interceptor和Filter區(qū)別
這篇文章主要介紹了淺談SpringMVC中Interceptor和Filter區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04
MyBatis?Plus如何實現(xiàn)獲取自動生成主鍵值
這篇文章主要介紹了MyBatis?Plus如何實現(xiàn)獲取自動生成主鍵值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09

