restful風格,restcontroller與controller詳解

restful風格,restcontroller與controller

初步接觸springmvc的時候,被要求使用restful風格,彼時一頭霧水,不懂何謂restful,參閱了很多資料,慢慢的接觸的也越來越多,如今spring的況且已基本運用熟練,簡單談一下我的一些看法,當然,只是我自己的淺顯粗陋的見解,不對的地方還望指正。

restful風格

簡單的理解,restful是一種url風格,或者說是規範,在以前的網址中,假定一個業務,取得數據網址爲http://test/get,添加信息的網址爲http://test/post,類似這樣。
但是在restful風格中,取得數據和添加數據的網址均應爲http://test,方法爲get或者post;所以,在restful風格中,一個網址就是一個資源,其形式類似於http://xxx.com/xx/{id}/{id} ,例如某購物網站,產品有很多種類,每種產品下有很多子類型,那麼http://shop.com/laptop/lenovo/1103 代表了聯想1103型號電腦,而http://shop.com/laptop/hp/1024 代表了2014型號電腦。

在spring mvc中,有@requestparm, @requestbody和@pathvariable 三種註解來獲得瀏覽器端的參數,其中前兩者都是由瀏覽器post提交的參數,而@pathvariable 則是從網址中取得參數;假設代碼如下:

@Requestmapping(value="/{category}/{brand}/{id},method=RequestMethod.POST)
public void getbyid(@PathVariable("category") String category
                    @PathVariable("brand") String brand
                    @PathVariable("id") String id){
                                     //具體代碼略
}

    在上述代碼中,訪問http://shop.com/laptop/hp/1024網址時,則,category爲“laptop”,brand爲”hp”,id爲”1024”;所以說,在restful風格中,一個網址即表示了一個資源。

    restcontroller與controller

    假定一個user對象,對象有很多屬性(name,sex,age,birth,address,tel)
    在我的瞭解中,這二者的區分爲:@restcontroller爲@controller和@responsebody的結合
    在@controller註解中,返回的是字符串,或者是字符串匹配的模板名稱,即直接渲染視圖,與html頁面配合使用的,在這種情況下,前後端的配合要求比較高,java後端的代碼要結合html的情況進行渲染,使用model對象(或者modelandview)將user的屬性渲染到頁面;
    java示例代碼如下:

    @Controller
    @RequestMapping(method = RequestMethod.GET, value = "/")
        public String getuser(Model model) throws IOException {
    
            model.addAttribute("name",bob);
            model.addAttribute("sex",boy);
            return "user";
    }
    

      對應的html代碼:

      <html xmlns:th="http://www.thymeleaf.org">
      <body>
          <div>
              <p>"${name}"</p>
              <p>"${sex}"</p>
          </div>
      </body>
      </html>

        而在@restcontroller中,返回的應該是一個對象,即return一個user對象,這時,在沒有頁面的情況下,也能看到返回的是一個user對象對應的json字符串,而前端的作用是利用返回的json進行解析渲染頁面,java後端的代碼比較自由。
        java端代碼:

        @RestController
        @RequestMapping(method = RequestMethod.GET, value = "/")
            public User getuser( ) throws IOException {
                User bob=new User();
                bob.setName("bob");
                bob.setSex("boy");
                return bob;
        }
        

          訪問網址得到的是json字符串{“name”:”bob”,”sex”:”boy”},前端頁面只需要處理這個字符串即可。

          發佈了22 篇原創文章 · 獲贊 37 · 訪問量 5萬+
          發表評論
          所有評論
          還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
          相關文章