知識庫 / Spring / Spring MVC RSS 訂閱

Spring @Controller 和 @RestController 註解

REST,Spring MVC
HongKong
6
03:53 AM · Dec 06 ,2025

1. 概述

本教程將討論 Spring MVC 中 <em @Controller</em>><em @RestController</em>> 註解之間的區別。

我們可以使用第一個註解來構建傳統的 Spring 控制器,該註解在框架中已經存在很長時間了。

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

2. Spring MVC 中的 <em @Controller>

我們可以使用 <em @Controller> 標註傳統的控制器。這只是 <em @Component> 類的專業化,允許通過類路徑掃描自動檢測實現類。

我們通常將 <em @Controller> 與 <em @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.