Spring @Controller 和 @RestController 註解

REST,Spring MVC
Remote
1
10:51 AM · Dec 01 ,2025

1. 概述

在本簡明教程中,我們將討論 @Controller@RestController 註解之間的區別,在 Spring MVC 中。

我們可以使用第一個註解用於傳統的 Spring 控制器,並且它已經成為框架的一部分很長時間了。

Spring 4.0 引入了 @RestController 註解,以便簡化 RESTful Web 服務創建。它是一個方便的註解,結合了@Controller @ResponseBody,從而消除了為控制器類中每個請求處理方法註解@ResponseBody 的需求。

2. Spring MVC @Controller

我們可以使用 @Controller 註解來標註經典控制器。這只是 @Component 類的特化版本,允許通過類路徑掃描自動檢測實現類。

我們通常將 @Controller@RequestMapping 註解結合使用,用於請求處理方法。

下面是一個 Spring MVC 控制器的快速示例:

@Controller
@RequestMapping("books")
public class SimpleBookController {

    @GetMapping("/{id}", produces = "application/json")
    public @ResponseBody Book getBook(@PathVariable int id) {
        return findBookById(id);
    }

    private Book findBookById(int id) {
        // ...
    }
}

我們使用了 @ResponseBody 註解來標註請求處理方法。這個註解使返回對象的自動序列化到 HttpResponse 中。

3. Spring MVC @RestController

@RestController 是一個專門版本的控制器。它包含了 @Controller@ResponseBody 註解,從而簡化了控制器實現:

@RestController
@RequestMapping("books-rest")
public class SimpleBookRestController {
    
    @GetMapping("/{id}", produces = "application/json")
    public Book getBook(@PathVariable int id) {
        return findBookById(id);
    }

    private Book findBookById(int id) {
        // ...
    }
}

控制器被 @RestController 註解標記,因此 @ResponseBody 不需要了。

控制器類中每個請求處理方法自動將返回對象序列化為 HttpResponse

4. 結論

在本文中,我們研究了 Spring Framework 中提供的經典和專業 REST 控制器。

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

發佈 評論

Some HTML is okay.