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。

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

TA貢獻1807條經(jīng)驗 獲得超9個贊
都是用注解進行元注解的@Controller
注解。所有這些注釋本質(zhì)上都是針對特定用例的注釋的專業(yè)化。該注解一般用于注冊Spring bean。@RestController
@Service
@Component
@Component
@Component
該@Controller
注解即使是用@Component
inside 進行注解的,它也提供了完全不同的功能。通過使用此注解來注解一個類,我們實際上是在告訴 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
@Controller
RequestMappingHandlerMapping
DispatcherServlet
?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 定義的一般支持保持一致。

TA貢獻1842條經(jīng)驗 獲得超21個贊
您不應(yīng)該得到相同的行為,因為 @Component 更通用。它僅將您的類注冊為 Spring Managed Bean。但是,@RestController 不僅將您的類注冊為托管 bean,還進一步將其注冊為對指定 URL 路徑的 HTTP 調(diào)用的入口點。其他特定于層的注釋(如 @Repository、@Configuration 等)也是如此
添加回答
舉報