@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註解類後就不會返回期望的檢視,就能說清楚了。