天天看點

SpringMVC——RestFul風格簡要說明

文章目錄

        • 1、概念
        • 2、功能
        • 3、傳統方式操作資源
        • 4、使用RestFul操作資源
        • 5、傳統方式的示例
        • 6、RestFul示例
        • 7、總結

1、概念

​ Restful就是一個資源定位及資源操作的風格。不是标準也不是協定,隻是一種風格。基于這個風格設計的軟體可以更簡潔,更有層次,更易于實作緩存等機制。

2、功能

  • 資源:網際網路所有的事物都可以被抽象為資源
  • 資源操作:使用POST、DELETE、PUT、GET,使用不同方法對資源進行操作。
  • 分别對應添加、删除、修改、查詢。

3、傳統方式操作資源

  • http://127.0.0.1/item/queryltem.action?id=1 查詢,GET
  • http://127.0.0.1/item/saveltem.action 新增,POST
  • http://127.0.0.1/item/updateltem.action 更新,POST
  • http://127.0.0.1/item/deleteltem.action?id=1 删除,GET或POST

4、使用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

5、傳統方式的示例

  • 控制層:RestFulController類
    @Controller
    public class RestFulController {
    
        //傳統的url:http://localhost:8080/add?a=1&b=2
        @RequestMapping("/add")
        public String test(int a, int b, Model model){
            int res = a+b;
            model.addAttribute("msg","結果為"+res);
            return "test";
        }
    }
               
  • 視圖層:test.jsp
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    ${msg}
    </body>
    </html>
               
  • 測試結果:位址欄輸入傳統的url:http://localhost:8080/add?a=1&b=2
    結果為3

6、RestFul示例

  • 控制層:RestFulController類
    • 方式一:@RequestMapping("/add2/{a}/{b}")
      //RestFul:http://localhost:8080/add2/1/2
      
      @RequestMapping("/add2/{a}/{b}")
      //@PathVariable 讓方法參數的值對應綁定到一個URL模闆變量
      public String test1(@PathVariable int a,@PathVariable int b, Model model){
          int res = a+b;
          model.addAttribute("msg","結果為"+res);
          return "test";
      }
      
                 
    • 方式二:使用method屬性指定請求類型
      @RequestMapping(value="/add2/{a}/{b}",method = RequestMethod.GET)
      
      public String test2(@PathVariable int a,@PathVariable int b, Model model){
          int res = a+b;
          model.addAttribute("msg","結果為"+res);
          return "test";
      }
      
                 
    • 方式三:使用組合注解@GetMapping
      @GetMapping("/add2/{a}/{b}")
      
      public String test3(@PathVariable int a,@PathVariable int b, Model model){
          int res = a+b;
          model.addAttribute("msg","結果為"+res);
          return "test";
      }
                 
  • 視圖層test.jsp同上
  • 測試結果:位址欄輸入RestFul風格的url:http://localhost:8080/add2/1/2
    結果為3

7、總結

  • 使用路徑變量的好處
    • 使路徑變得更加簡潔;
    • 獲得參數更加友善,架構會自動進行類型轉換。
    • 通過路徑變量的類型可以限制通路參數,如果類型不一樣,則通路不到對應的請求方法,如這裡通路是的路徑是/add/1/2,則路徑與方法不比對,而不會是參數轉換失敗。
  • 使用method屬性指定請求類型
    • 用于限制請求的類型,可以收窄請求範圍。指定請求謂詞的類型如GET, POST, HEAD,OPTIONS,PUT,PATCH,DELETE,TRACE等
  • 所有的位址欄請求預設都會是HTTP GET類型的
  • 方法級别的注解變體有如下幾個:組合注解
    @GetMapping
    @PostMapping
    @PutMapping
    @DeleteMapping
    @PatchMapping
               
    • @GetMapping是一個組合注解,它所扮演的是@RequestMapping(method =RequestMethod.GET)的一個快捷方式