4 回答
TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
@Controller是傳統(tǒng)控制器中的用戶,引入@RestController注解是為了簡化RESTful Web服務(wù)的創(chuàng)建。這是一個(gè)結(jié)合了 @Controller 和 @ResponseBody 的便捷注解
@Controller 注釋只是 @Component 類的特化,允許通過類路徑掃描自動(dòng)檢測實(shí)現(xiàn)類。
@Controller 通常與請(qǐng)求處理方法上使用的 @RequestMapping 注釋結(jié)合使用。
請(qǐng)求處理方法用@ResponseBody注釋。此注釋允許將返回對(duì)象自動(dòng)序列化到 HttpResponse 中。
@RestController 是控制器的特殊版本。它包含 @Controller 和 @ResponseBody 注釋,因此簡化了控制器實(shí)現(xiàn)。
控制器使用 @RestController 注釋進(jìn)行注釋,因此不需要 @ResponseBody。
控制器類的每個(gè)請(qǐng)求處理方法都會(huì)自動(dòng)將返回對(duì)象序列化為 HttpResponse。
TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊
僅僅因?yàn)?code>@RestController它是一個(gè)@Component并不意味著您可以通過切換到更廣泛的功能來實(shí)現(xiàn)相同的功能@Component。即使添加了@ResponseBody,您也無法實(shí)現(xiàn)等效的功能(如通過POST不支持的請(qǐng)求方法所表示的)。
替換@Component為@Controller,因?yàn)?a與+@RestController具有完全相同的功能。您還可以在 的元注釋中看到這一點(diǎn),您會(huì)看到它是元注釋的,而不僅僅是。反過來,用 進(jìn)行元注釋。@Controller@ResponseBody@RestController@Controller@Component@Controller@Component
TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
都是用注解進(jìn)行元注解的@Controller注解。所有這些注釋本質(zhì)上都是針對(duì)特定用例的注釋的專業(yè)化。該注解一般用于注冊(cè)Spring bean。@RestController@Service@Component@Component@Component
該@Controller注解即使是用@Componentinside 進(jìn)行注解的,它也提供了完全不同的功能。通過使用此注解來注解一個(gè)類,我們實(shí)際上是在告訴 spring 掃描此類中的@RequestMapping注解來注冊(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注釋指示特定類充當(dāng)控制器的角色。注解的基本目的
@Controller是充當(dāng)被注解類的構(gòu)造型,表明其作用。調(diào)度程序?qū)呙璐祟悗ё⑨尩念愐圆檎矣成浞椒ǎ瑱z測@RequestMapping注釋(請(qǐng)參閱下一節(jié))。帶注釋的控制器 bean 可以使用調(diào)度程序上下文中的標(biāo)準(zhǔn) Spring bean 定義來顯式定義。然而,?
@Controller構(gòu)造型還允許自動(dòng)檢測,與 Spring 2.5 對(duì)檢測類路徑中的組件類和自動(dòng)注冊(cè)它們的 bean 定義的一般支持保持一致。
TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊
您不應(yīng)該得到相同的行為,因?yàn)?@Component 更通用。它僅將您的類注冊(cè)為 Spring Managed Bean。但是,@RestController 不僅將您的類注冊(cè)為托管 bean,還進(jìn)一步將其注冊(cè)為對(duì)指定 URL 路徑的 HTTP 調(diào)用的入口點(diǎn)。其他特定于層的注釋(如 @Repository、@Configuration 等)也是如此
添加回答
舉報(bào)
