關於@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注解類后就不會返回期望的視圖,就能說清楚了。