1、在Spring中@RestController的做用等同於@Controller + @ResponseBody。html
因此想要理解@RestController註解就要先了解@Controller和@ResponseBody註解。java
2、@Controller註解spring
在一個類上添加@Controller註解,代表了這個類是一個控制器類。但想要讓這個類成爲一個處理請求的處理器光有@Controller註解是不夠的,他還須要進一步修煉才能成爲一個處理器。express
1.在spring容器中建立該類的實例。建立實例的方式有兩種:json
<bean class="test.controller.MyController" />
上述這種方式是在spring容器中注入單個bean,當項目比較大,控制器類比較多時,用這種方式向Spring容器中注入bean很是的讓人苦惱,索性有第二種方式。app
<context:component-scan base-scan="test.controller" />
這種方式會掃描指定包中的全部類,並生成相應的bean注入到spring容器中。使用這種方式固然可以極大提升咱們的開發效率,可是有時候咱們不想某一類型的類注入到spring容器中。url
這個時候第二種方式也能夠解決。spa
<context:component-scan base-package="test" > <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/> </context:component-scan>
上述代碼表示掃描test包中除有@Service註解以外的類。.net
2.將@Controller註解的類注入Spring容器中,只是該類成爲處理器的第一步,想要修煉大成,還須要在該類中添加註解@RequestMapping。code
@RequestMapping註解是用來映射請求的,即指明處理器能夠處理哪些URL請求,該註解既能夠用在類上,也能夠用在方法上。
當使用@RequestMapping標記控制器類時,方法的請求地址是相對類的請求地址而言的;當沒有使用@RequestMapping標記類時,方法的請求地址是絕對路徑。
@RequestMapping的地址能夠是uri變量,而且經過@PathVariable註解獲取做爲方法的參數。也能夠是通配符來篩選請求地址。具體的使用方法不是本次的重點,有興趣的能夠看
https://www.cnblogs.com/xiepeixing/p/4243288.html
1 @Controller 2 @RequestMapping("/user") 3 public class UserController{ 4 5 @RequestMapping("/users") 6 public String users() { 7 return "users"; 8 } 9 10 11 }
此時請求users方法的url路徑就是:.../user/users。
能夠看到上面users方法的返回值是字符串類型的,這個就是處理器在處理完任務後將要跳轉的頁面。若是想要方法直接返回結果,而不是跳轉頁面,這就要用到@ResponseBody註解了。
3、@ResponseBody註解
@ResponseBody表示方法的返回值直接以指定的格式寫入Http response body中,而不是解析爲跳轉路徑。
格式的轉換是經過HttpMessageConverter中的方法實現的,由於它是一個接口,所以由其實現類完成轉換。
若是要求方法返回的是json格式數據,而不是跳轉頁面,能夠直接在類上標註@RestController,而不用在每一個方法中標註@ResponseBody,簡化了開發過程。
理解@RestController過程當中參考了下面這些博客,很是感謝
http://www.javashuo.com/article/p-wpvxzyyv-dc.html