@RestController注解初步理解


一、在Spring中@RestController的作用等同於@Controller + @ResponseBody。

  所以想要理解@RestController注解就要先了解@Controller和@ResponseBody注解。

二、@Controller注解

  在一個類上添加@Controller注解,表明了這個類是一個控制器類。但想要讓這個類成為一個處理請求的處理器光有@Controller注解是不夠的,他還需要進一步修煉才能成為一個處理器。

  1.在spring容器中創建該類的實例。創建實例的方式有兩種:

  <bean class="test.controller.MyController" />

  上述這種方式是在spring容器中注入單個bean,當項目比較大,控制器類比較多時,用這種方式向Spring容器中注入bean非常的讓人苦惱,索性有第二種方式。

  <context:component-scan base-scan="test.controller" />

  這種方式會掃描指定包中的所有類,並生成相應的bean注入到spring容器中。使用這種方式當然能夠極大提高我們的開發效率,但是有時候我們不想某一類型的類注入到spring容器中。

  這個時候第二種方式也可以解決。

  <context:component-scan base-package="test" >
      <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
  </context:component-scan>

  上述代碼表示掃描test包中除有@Service注解之外的類。

  2.將@Controller注解的類注入Spring容器中,只是該類成為處理器的第一步,想要修煉大成,還需要在該類中添加注解@RequestMapping。

   @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注解了。

三、@ResponseBody注解

  @ResponseBody表示方法的返回值直接以指定的格式寫入Http response body中,而不是解析為跳轉路徑。

  格式的轉換是通過HttpMessageConverter中的方法實現的,因為它是一個接口,因此由其實現類完成轉換。

如果要求方法返回的是json格式數據,而不是跳轉頁面,可以直接在類上標注@RestController,而不用在每個方法中標注@ResponseBody,簡化了開發過程。

理解@RestController過程中參考了下面這些博客,非常感謝

https://www.cnblogs.com/daimajun/p/7152970.html

https://blog.csdn.net/l358366885/article/details/79485497

https://blog.csdn.net/sunroyfcb/article/details/81048675


免責聲明!

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



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