最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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
依賴組件ViewResolverHttpMessageConverter
注解組合@Controller + @ResponseBody

根據(jù)項目需求選擇注解:

需要頁面渲染用 @Controller,純 API 服務(wù)用 @RestController。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java Buffer緩沖區(qū)操作與內(nèi)存管理最佳實踐

    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
  • 從入門到精通詳解Java中的RESTful接口開發(fā)

    從入門到精通詳解Java中的RESTful接口開發(fā)

    這篇文章主要為大家詳細介紹了Java中的RESTful接口開發(fā)的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-12-12
  • 解讀@RabbitListener起作用的原理

    解讀@RabbitListener起作用的原理

    這篇文章主要介紹了解讀@RabbitListener起作用的原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • java數(shù)組輸出的實例代碼

    java數(shù)組輸出的實例代碼

    這篇文章主要介紹了java數(shù)組輸出的實例代碼,有需要的朋友可以參考一下
    2013-12-12
  • 淺談SpringMVC中Interceptor和Filter區(qū)別

    淺談SpringMVC中Interceptor和Filter區(qū)別

    這篇文章主要介紹了淺談SpringMVC中Interceptor和Filter區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • springboot使用@Slf4j進行日志的記錄步驟詳解

    springboot使用@Slf4j進行日志的記錄步驟詳解

    這篇文章主要介紹了springboot使用@Slf4j進行日志的記錄,使用@Slf4j的注解進行日志記錄非常方便,本文給大家分享操作步驟,需要的朋友可以參考下
    2023-08-08
  • Spring中接口FactoryBean作用及說明

    Spring中接口FactoryBean作用及說明

    這篇文章主要介紹了Spring中接口FactoryBean作用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2026-05-05
  • MyBatis?Plus如何實現(xiàn)獲取自動生成主鍵值

    MyBatis?Plus如何實現(xiàn)獲取自動生成主鍵值

    這篇文章主要介紹了MyBatis?Plus如何實現(xiàn)獲取自動生成主鍵值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 修改IDEA代碼左側(cè)折疊線顏色的操作

    修改IDEA代碼左側(cè)折疊線顏色的操作

    這篇文章主要介紹了修改IDEA代碼左側(cè)折疊線顏色的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java 中枚舉類enum的values()方法的詳解

    java 中枚舉類enum的values()方法的詳解

    這篇文章主要介紹了java 中枚舉類enum的values()方法的詳解的相關(guān)資料,希望通過本文大家能夠掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09

最新評論

徐水县| 南宫市| 西峡县| 龙海市| 汉源县| 安龙县| 桂林市| 平江县| 茶陵县| 兰州市| 建瓯市| 肥西县| 册亨县| 麦盖提县| 永济市| 突泉县| 安顺市| 千阳县| 砀山县| 通江县| 枣阳市| 扎兰屯市| 遂溪县| 丹棱县| 石林| 康定县| 图们市| 全椒县| 亳州市| 伊金霍洛旗| 西林县| 山西省| 玉溪市| 桂东县| 宜兰县| 棋牌| 宁国市| 浮梁县| 昂仁县| 南丹县| 江津市|