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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

@RestController 和 @Component 之間的細微差別

@RestController 和 @Component 之間的細微差別

眼眸繁星 2023-10-19 21:43:33
雖然網(wǎng)上每個頁面都說@RestController是@Component的規(guī)范,但我不知道它是否與DispatcherServlet有關(guān)。但是當(dāng)我通過在 @RestController 和 @Component 之間切換來嘗試下面的代碼時,我沒有看到相同的行為:首先我嘗試使用@RestController:@RestComponentpublic class TestController {    @RequestMapping(value="/testController", method=RequestMethod.POST,consumes=MediaType.APPLICATION_JSON_VALUE)    public void testController() {        System.out.println("Hello");    }}我在控制臺中得到以下輸出:你好其次我嘗試使用@Component + @ResponseBody:@Component@ResponseBodypublic class TestController {    @RequestMapping(value="/testController", method=RequestMethod.POST,consumes=MediaType.APPLICATION_JSON_VALUE)    public void testController() {        System.out.println("Hello");    }}我在郵遞員上收到錯誤:{    "timestamp": 1570998345860,    "status": 405,    "error": "Method Not Allowed",    "message": "Request method 'POST' not supported",    "path": "/testController"}如果兩個注釋相同,那么為什么輸出存在差異?下面是 @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 注解的類中的 URL。
查看完整描述

4 回答

?
猛跑小豬

TA貢獻1858條經(jīng)驗 獲得超8個贊

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

@Controller 注釋只是 @Component 類的特化,允許通過類路徑掃描自動檢測實現(xiàn)類。

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

請求處理方法用@ResponseBody注釋。此注釋允許將返回對象自動序列化到 HttpResponse 中。

@RestController 是控制器的特殊版本。它包含 @Controller 和 @ResponseBody 注釋,因此簡化了控制器實現(xiàn)。

控制器使用 @RestController 注釋進行注釋,因此不需要 @ResponseBody。

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

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

TA貢獻1848條經(jīng)驗 獲得超10個贊

僅僅因為@RestController它是一個@Component并不意味著您可以通過切換到更廣泛的功能來實現(xiàn)相同的功能@Component。即使添加了@ResponseBody,您也無法實現(xiàn)等效的功能(如通過POST不支持的請求方法所表示的)。

替換@Component@Controller,因為 a與+@RestController具有完全相同的功能。您還可以在 的元注釋中看到這一點,您會看到它是元注釋的,而不僅僅是。反過來,用 進行元注釋。@Controller@ResponseBody@RestController@Controller@Component@Controller@Component


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

TA貢獻1807條經(jīng)驗 獲得超9個贊

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

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

當(dāng) spring 應(yīng)用程序啟動時,DispatcherServlet將啟用(這是一個在s 上RequestMappingHandlerMapping?RequestMappingHandlerAdapter查找注釋的處理程序映射)。因此,當(dāng)請求到達調(diào)度程序 servlet 時,它會將其交給將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注釋指示特定類充當(dāng)控制器的角色。

注解的基本目的@Controller是充當(dāng)被注解類的構(gòu)造型,表明其作用。調(diào)度程序?qū)呙璐祟悗ё⑨尩念愐圆檎矣成浞椒?,檢測@RequestMapping注釋(請參閱下一節(jié))。

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


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

TA貢獻1842條經(jīng)驗 獲得超21個贊

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



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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號

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