第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

@RestController 和 @Component 之間的細(xì)微差別

@RestController 和 @Component 之間的細(xì)微差別

眼眸繁星 2023-10-19 21:43:33
雖然網(wǎng)上每個(gè)頁(yè)面都說(shuō)@RestController是@Component的規(guī)范,但我不知道它是否與DispatcherServlet有關(guān)。但是當(dāng)我通過(guò)在 @RestController 和 @Component 之間切換來(lái)嘗試下面的代碼時(shí),我沒(méi)有看到相同的行為:首先我嘗試使用@RestController:@RestComponentpublic class TestController {    @RequestMapping(value="/testController", method=RequestMethod.POST,consumes=MediaType.APPLICATION_JSON_VALUE)    public void testController() {        System.out.println("Hello");    }}我在控制臺(tái)中得到以下輸出:你好其次我嘗試使用@Component + @ResponseBody:@Component@ResponseBodypublic class TestController {    @RequestMapping(value="/testController", method=RequestMethod.POST,consumes=MediaType.APPLICATION_JSON_VALUE)    public void testController() {        System.out.println("Hello");    }}我在郵遞員上收到錯(cuò)誤:{    "timestamp": 1570998345860,    "status": 405,    "error": "Method Not Allowed",    "message": "Request method 'POST' not supported",    "path": "/testController"}如果兩個(gè)注釋相同,那么為什么輸出存在差異?下面是 @RestController 和 @Controller 的源代碼,可以看出 @RestController 和 @Controller 都是 @Component 的規(guī)范:@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Controller@ResponseBodypublic @interface RestController {}@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic @interface Controller {}也許它必須與DispatcherServlet有關(guān)。Dispatcher Servlet 可能只檢查 @RestController 注解的類(lèi)中的 URL。
查看完整描述

4 回答

?
猛跑小豬

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊

@Controller是傳統(tǒng)控制器中的用戶(hù),引入@RestController注解是為了簡(jiǎn)化RESTful Web服務(wù)的創(chuàng)建。這是一個(gè)結(jié)合了 @Controller 和 @ResponseBody 的便捷注解

@Controller 注釋只是 @Component 類(lèi)的特化,允許通過(guò)類(lèi)路徑掃描自動(dòng)檢測(cè)實(shí)現(xiàn)類(lèi)。

@Controller 通常與請(qǐng)求處理方法上使用的 @RequestMapping 注釋結(jié)合使用。

請(qǐng)求處理方法用@ResponseBody注釋。此注釋允許將返回對(duì)象自動(dòng)序列化到 HttpResponse 中。

@RestController 是控制器的特殊版本。它包含 @Controller 和 @ResponseBody 注釋?zhuān)虼撕?jiǎn)化了控制器實(shí)現(xiàn)。

控制器使用 @RestController 注釋進(jìn)行注釋?zhuān)虼瞬恍枰?@ResponseBody。

控制器類(lèi)的每個(gè)請(qǐng)求處理方法都會(huì)自動(dòng)將返回對(duì)象序列化為 HttpResponse。

查看完整回答
反對(duì) 回復(fù) 2023-10-19
?
慕桂英546537

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊

僅僅因?yàn)?code>@RestController它是一個(gè)@Component并不意味著您可以通過(guò)切換到更廣泛的功能來(lái)實(shí)現(xiàn)相同的功能@Component。即使添加了@ResponseBody,您也無(wú)法實(shí)現(xiàn)等效的功能(如通過(guò)POST不支持的請(qǐng)求方法所表示的)。

替換@Component@Controller,因?yàn)?a與+@RestController具有完全相同的功能。您還可以在 的元注釋中看到這一點(diǎn),您會(huì)看到它是元注釋的,而不僅僅是。反過(guò)來(lái),用 進(jìn)行元注釋。@Controller@ResponseBody@RestController@Controller@Component@Controller@Component


查看完整回答
反對(duì) 回復(fù) 2023-10-19
?
函數(shù)式編程

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊

都是用注解進(jìn)行元注解的@Controller注解。所有這些注釋本質(zhì)上都是針對(duì)特定用例的注釋的專(zhuān)業(yè)化。該注解一般用于注冊(cè)Spring bean。@RestController@Service@Component@Component@Component

@Controller注解即使是用@Componentinside 進(jìn)行注解的,它也提供了完全不同的功能。通過(guò)使用此注解來(lái)注解一個(gè)類(lèi),我們實(shí)際上是在告訴 spring 掃描此類(lèi)中的@RequestMapping注解來(lái)注冊(cè) bean 以進(jìn)行請(qǐng)求映射。當(dāng)您僅使用注釋時(shí),不會(huì)發(fā)生這種情況@Component

當(dāng) spring 應(yīng)用程序啟動(dòng)時(shí),DispatcherServlet將啟用(這是一個(gè)在s 上RequestMappingHandlerMapping?RequestMappingHandlerAdapter查找注釋的處理程序映射)。因此,當(dāng)請(qǐng)求到達(dá)調(diào)度程序 servlet 時(shí),它會(huì)將其交給將uri 解析為控制器方法 bean。5.x@RequestMapping@ControllerRequestMappingHandlerMappingDispatcherServlet?HandlerMapping

注意:在舊版本的 spring 中,DefaultAnnotationHandlerMapping?spring 啟用了此功能。

綜上所述:

  • @Component是任何 Spring 管理的組件或 bean 的通用構(gòu)造型。

  • @Repository是持久層的構(gòu)造型。

  • @Service是服務(wù)層的構(gòu)造型。

  • @Controller是表示層(spring-MVC)的構(gòu)造型。

@Controller注釋指示特定類(lèi)充當(dāng)控制器的角色。

注解的基本目的@Controller是充當(dāng)被注解類(lèi)的構(gòu)造型,表明其作用。調(diào)度程序?qū)呙璐祟?lèi)帶注釋的類(lèi)以查找映射方法,檢測(cè)@RequestMapping注釋?zhuān)ㄕ?qǐng)參閱下一節(jié))。

帶注釋的控制器 bean 可以使用調(diào)度程序上下文中的標(biāo)準(zhǔn) Spring bean 定義來(lái)顯式定義。然而,?@Controller構(gòu)造型還允許自動(dòng)檢測(cè),與 Spring 2.5 對(duì)檢測(cè)類(lèi)路徑中的組件類(lèi)和自動(dòng)注冊(cè)它們的 bean 定義的一般支持保持一致。


查看完整回答
反對(duì) 回復(fù) 2023-10-19
?
茅侃侃

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊

您不應(yīng)該得到相同的行為,因?yàn)?@Component 更通用。它僅將您的類(lèi)注冊(cè)為 Spring Managed Bean。但是,@RestController 不僅將您的類(lèi)注冊(cè)為托管 bean,還進(jìn)一步將其注冊(cè)為對(duì)指定 URL 路徑的 HTTP 調(diào)用的入口點(diǎn)。其他特定于層的注釋?zhuān)ㄈ?@Repository、@Configuration 等)也是如此



查看完整回答
反對(duì) 回復(fù) 2023-10-19
  • 4 回答
  • 0 關(guān)注
  • 314 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)