@Controller和@RestController的區別


 

 

        關於@RestController 的解釋官方文檔是這樣說的@RestController is astereotype annotation that combines @ResponseBody and @Controller.就是說@RestController注解相當於@ResponseBody加 @Controller合在一起的作用。那本着追根問底的原則,那么就先探討下@Controller和@ResponseBody的作用 。

首先看到@Controller位於org.springframework.stereotype包下,接下來逐條解釋每個注解的含義

@Target({ElementType.TYPE}),看源碼不解釋

說明該注解是作用在類、接口(包括注解)或者是枚舉類上

@Retention(RetentionPolicy.RUNTIME) 

表明該注解由編譯器記錄在類文件中,虛擬機在運行時保留它們,因此可以反射地讀取它們。

@Documented 注釋類型申明,沒什么卵用

@Component是一個元注解,可以注解其他類注解,如@Controller、 @Service,當然如@Controller @Service;當然也可以注解類,當一個類使用該注解時,這些類就會被實例化,相當於配置文件中的 <bean id="" class=""/>。

 

@ResponseBody

該注解是作用在類上或方法上,作用是什么呢,是將controller的方法返回的對象通過適當的轉換器轉換為指定的格式之后,寫入到response對象的body區,通常用來返回JSON數據或者是XML數據,需要注意的是在使用此注解之后不會再走視圖處理器,而是直接將數據寫入到輸入流中,他的效果等同於通過response對象輸出指定格式的數據。

通俗點,直接上圖

加@ResponseBody

訪問localhost:8080/hellotest

 

而看@RestController源碼可以看出

所以你可能之前一直納悶,為啥子@RestController注解類后就不會返回期望的視圖,就能說清楚了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM