1. 程式人生 > 其它 >SpringMVC學習09 :RestFul風格講解

SpringMVC學習09 :RestFul風格講解

 

SpringMVC學習09 :RestFul風格講解

  • RestFul風格:

    • 概念:

      • RestFul就是一個資源定位資源操作的風格,不是標準,也不是協議,只是一種風格

      • 基於這個風格的軟體可以更簡潔,更有層次,更易於實現快取等機制;

      • RestFul風格:都是以 / 作為分隔符;

         

    • 功能:

      • 資源:網際網路所有的事物都可以被抽象為資源;

      • 資源操作:使用POST,DELETE,PUT,GET,使用不同方法對資源進行操作;

      • 分別對應:新增,刪除,修改,查詢

         

  • 傳統方式操作資源:

    • 通過不同的引數來實現不同的效果:方法單一:post和get

      http://127.0.0.1/admin/demo1.action?id=1 查詢,GET
      http://127.0.0.1/admin/demo2.action 新增,POST
      http://127.0.0.1/admin/demo3.action 更新,POST
      http://127.0.0.1/admin/demo4.action?id=1 刪除,GET/POST

 

 

  • 使用RestFul操作資源:

    • 可以通過不同的請求方式來實現不同的效果:如下:請求地址一樣,但是功能可以不同

    • 大型網站都是RestFul風格;

      http://127.0.0.1/item/1 查詢,GET
      http://127.0.0.1/item 新增,POST
      http://127.0.0.1/item 更新,PUT
      http://127.0.0.1/item/1 刪除,DELETE

 

  • 測試:

    • 原來方式測試類:

      @Controller
      public class RestFulController {

         @RequestMapping("/add")
         public String test1(int a ,int b , Model model){
             //前端訪問:可以直接傳引數:http://localhost:8080/add?a=1&b=2
             int res=a+b;
             model.addAttribute("msg","結果為:"+res);
             return "hello";
        }
      }

       

    • RestFul方式測試:

      • 在SpringMVC中可以使用@PathVariable註解,讓方法引數的值對應繫結到一個URL模板變數上;

      • RestFul方式:http://localhost:8080/add/1/4

      @Controller
      public class RestFulController {
         //int型別
         @RequestMapping("/add/{a}/{b}")
         public String test1(@PathVariable int a ,@PathVariable int b , Model model){
             //RestFul:http://localhost:8080/add/a/b
             //@PathVariable :路徑變數,通過它就可以取值了
             int res=a+b;
             model.addAttribute("msg","結果為:"+res);
             return "hello";
        }
      }
    • 思考:使用路徑變數的好處?

      • 簡潔:訪問路徑簡潔;

      • 高效:RestFul支援快取;

      • 安全:原來的方式,引數直接暴漏;

         

 

  • 使用Method屬性指定請求型別:

    • 用於約束請求的型別,可以收窄請求範圍,指定請求謂詞的型別如:GET,POST,PUT,DELETE等;

    • 測試:

      • 瀏覽器預設的請求方式是GET,如果我們顯式定義的不一致,就會報錯405;

      • 【重點】:method方法的值一定要加 { }

      @RequestMapping(value = "/add1/{a}/{str}",method = {RequestMethod.DELETE})
      public String test(@PathVariable int a ,@PathVariable String str , Model model){
         //RestFul:http://localhost:8080/add/a/b
         //@PathVariable :路徑變數,通過它就可以取值了
         String res=a+str;
         model.addAttribute("msg","結果為:"+res);
         return "hello";
      }
    • 總結:

      • SpringMVC的@RequestMapping註解能夠處理HTTP請求的方法,比如GET , PUT , POST , DELETE以及PATCH等;

      • 所有的位址列請求預設都會是HTTP GET型別的;

      • 方法級別的註解變體有:組合註解

        @GetMapping
        @PostMapping
        @PutMapping
        @DeleteMapping
        @PatchMapping

        例子:
        @GetMapping("/add1/{a}/{b}")=@RequestMapping(value = "/add1/{a}/{str}",method = {RequestMethod.GET})
      • @GetMapping是一個組合註解,平時使用的會比較多!