@RestController
是 Spring MVC 中用于創建 RESTful Web 服務的核心注解。
@RestController 核心知識點 REST
- 作用:
@RestController
是一個方便的組合注解,它結合了@Controller
和@ResponseBody
兩個注解。@Controller
: 將類標記為一個控制器,使其能夠處理傳入的 Web 請求。@ResponseBody
: 應用于類級別時,表示該控制器中所有請求處理方法的返回值都將直接寫入 HTTP 響應體中,而不是視圖解析。
- 目的: 簡化 RESTful API 的開發。使用
@RestController
后,你不再需要在每個請求處理方法上都顯式添加@ResponseBody
注解。 - 返回值處理:
- 方法的返回值通常會被 Spring 的
HttpMessageConverter
轉換為某種格式(如 JSON、XML)然后發送給客戶端。 - 如果類路徑下有 Jackson 庫 (通常通過
spring-boot-starter-web
或spring-boot-starter-json
引入),Spring Boot 會自動配置 Jackson 作為默認的 JSON 轉換器。因此,返回一個 POJO 對象通常會自動序列化為 JSON 字符串。 - 也可以返回
ResponseEntity
對象,這樣可以更精細地控制 HTTP 響應的狀態碼、頭部信息和響應體。
- 方法的返回值通常會被 Spring 的
- 與
@Controller
的區別:@Controller
: 通常用于傳統的 Spring MVC 應用,其方法返回值一般是視圖名稱(如 JSP 文件名、Thymeleaf 模板名),然后由視圖解析器解析為最終的視圖。如果需要返回數據作為響應體,則需要在方法上額外添加@ResponseBody
。@RestController
: 專門為構建 RESTful API 設計,所有方法默認將數據直接寫入響應體。
- 請求映射注解: 通常與請求映射注解(如
@GetMapping
,@PostMapping
,@PutMapping
,@DeleteMapping
,@RequestMapping
)配合使用,來定義處理特定 HTTP 請求路徑和方法的處理器方法。- 例如:
@RestController @RequestMapping("/api/users") public class UserController {@GetMapping("/{id}")public User getUserById(@PathVariable Long id) {// ... 邏輯來獲取用戶return user; // User 對象會被轉換為 JSON}@PostMappingpublic ResponseEntity<User> createUser(@RequestBody User user) {// ... 邏輯來創建用戶return ResponseEntity.status(HttpStatus.CREATED).body(savedUser);} }
- 例如:
- 組件掃描: 類被
@RestController
注解后,如果它所在的包被@ComponentScan
(或 Spring Boot 應用主類上的@SpringBootApplication
)掃描到,Spring IoC 容器會自動將其注冊為一個 Bean。 - Spring Boot 自動配置: 在 Spring Boot 應用中,如果使用了
spring-boot-starter-web
,那么構建 RESTful API 時,@RestController
是首選的注解。
總結:@RestController
通過組合 @Controller
和 @ResponseBody
,極大地簡化了創建 RESTful Web 服務控制器的過程,使得開發者可以專注于業務邏輯,而方法的返回值會自動轉換為適合網絡傳輸的格式(通常是 JSON)。