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

Springboot中Controller和RestController的使用及區(qū)別

 更新時(shí)間:2025年11月21日 09:59:15   作者:IT小鳥(niǎo)鳥(niǎo)  
文章總結(jié)了Spring框架中@Controller和@RestController的區(qū)別,包括它們的用途、工作機(jī)制、使用場(chǎng)景以及底層原理,文章指出,@Controller用于傳統(tǒng)的SpringMVC應(yīng)用,返回視圖或數(shù)據(jù)(需@ResponseBody)

在 Spring 框架中,@Controller 和 @RestController 是用于處理 HTTP 請(qǐng)求的注解,但它們的用途和行為有顯著區(qū)別:

1. 核心區(qū)別

@Controller

  • 用于傳統(tǒng)的 Spring MVC 應(yīng)用,通常返回視圖(View)(如 JSP、Thymeleaf 等)。
  • 若需要返回?cái)?shù)據(jù)(如 JSON/XML),需額外使用 @ResponseBody 注解。

@RestController

  • 是 Spring 4.0 引入的注解,專門用于構(gòu)建 RESTful Web 服務(wù),直接返回?cái)?shù)據(jù)(JSON/XML)。
  • 它本質(zhì)上是 @Controller + @ResponseBody 的組合,自動(dòng)將返回值序列化為 HTTP 響應(yīng)體。

2. 工作機(jī)制對(duì)比

@Controller

  • 默認(rèn)假設(shè)方法返回的是視圖名稱(View Name),由 ViewResolver 解析為具體頁(yè)面。
  • 若要返回?cái)?shù)據(jù),需在方法上添加 @ResponseBody,此時(shí)會(huì)通過(guò) 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

  • 所有方法默認(rèn)添加了 @ResponseBody,直接返回?cái)?shù)據(jù),無(wú)需視圖解析。
  • 適合 API 開(kāi)發(fā),不涉及頁(yè)面渲染。
@RestController
public class MyRestController {
    @GetMapping("/api/user")
    public User getUser() {
        return new User("Bob"); // 自動(dòng)轉(zhuǎn)換為 JSON
    }
}

3. 使用場(chǎng)景

@Controller

  • 適用于需要混合視圖和少量數(shù)據(jù)返回的傳統(tǒng) Web 應(yīng)用(如前后端未分離的場(chǎng)景)。

@RestController

  • 專為 RESTful API 設(shè)計(jì),適用于前后端分離架構(gòu),僅返回?cái)?shù)據(jù)(如 JSON/XML)。

4. 底層原理

  • @Controller 依賴 ViewResolver 解析視圖,而 @RestController 依賴 HttpMessageConverter 轉(zhuǎn)換數(shù)據(jù)。
  • @RestController 的源碼定義如下,可以看出它是 @Controller 的增強(qiáng)版:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {}

總結(jié)

特性@Controller@RestController
返回類型視圖(默認(rèn))或數(shù)據(jù)(需 @ResponseBody)直接返回?cái)?shù)據(jù)
適用場(chǎng)景傳統(tǒng) MVC 頁(yè)面渲染RESTful API
依賴組件ViewResolverHttpMessageConverter
注解組合無(wú)@Controller + @ResponseBody

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

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

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

相關(guān)文章

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

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

    Java NIO的Buffer是數(shù)據(jù)容器,管理堆/堆外內(nèi)存,具備position、limit、capacity三大屬性,支持讀寫切換,直接緩沖區(qū)I/O快但創(chuàng)建較慢,非直接緩沖區(qū)更易管理,根據(jù)場(chǎng)景選擇合適類型以優(yōu)化性能,本文給大家介紹Java Buffer緩沖區(qū)操作與內(nèi)存管理最佳實(shí)踐,感興趣的朋友一起看看吧
    2025-09-09
  • 從入門到精通詳解Java中的RESTful接口開(kāi)發(fā)

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

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

    解讀@RabbitListener起作用的原理

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

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

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

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

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

    springboot使用@Slf4j進(jìn)行日志的記錄步驟詳解

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

    Spring中接口FactoryBean作用及說(shuō)明

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

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

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

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

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

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

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

最新評(píng)論

乌鲁木齐市| 额济纳旗| 张家港市| 中阳县| 定南县| 巴塘县| 洛扎县| 上杭县| 乳山市| 洛浦县| 新源县| 鄂托克前旗| 马山县| 栖霞市| 桐柏县| 松溪县| 杨浦区| 前郭尔| 喜德县| 江门市| 准格尔旗| 新绛县| 青河县| 兴城市| 凤凰县| 奉化市| 百色市| 浮山县| 武乡县| 宜城市| 陕西省| 武夷山市| 弥勒县| 东光县| 上犹县| 靖江市| 定安县| 调兵山市| 锦州市| 丰原市| 安平县|