@RequestMapping映射請求,@PathVariable,@RequestParam,@RequestHeader的使用

來源:互聯網
上載者:User

標籤:指定   聯合   exce   ppi   不能   style   ble   blog   rest   

1、@RequestMapping

Spring MVC 使用 @RequestMapping 註解為控制器指定可以處理哪些 URL 請求,在控制器的類定義及方法定義處都可標註。

@RequestMapping

  • 類定義處:提供初步的請求映射資訊。相當於當前 WEB 應用的根目錄
  • 方法處:提供進一步的細分映射資訊。相對於類定義處的 URL。
  • 若類定義處未標註 @RequestMapping,則方法處標記的 URL 相當於當前 WEB 應用的根目錄
  • 若類定義處標註 @RequestMapping,則方法處標記的 URL 相對於類定義處的@RequestMapping而言的!

DispatcherServlet 截獲請求後,就通過控制器上@RequestMapping 提供的映射資訊確定請求所對應的處理方法。

映射請求參數、要求方法或要求標頭
@RequestMapping 除了可以使用請求 URL 對應請求外,還可以使用要求方法、請求參數及要求標頭映射請求

@RequestMapping 的 value、method、params 及 heads 分別表示請求 URL、要求方法、請求參數及要求標頭的映射條件,他們之間是與的關係,聯合使用多個條件可讓請求映射更加精確化。

(1)params 和 headers支援簡單的運算式:

  • param1: 表示請求必須包含名為 param1 的請求參數
  • !param1: 表示請求不能包含名為 param1 的請求參數
  • param1 != value1: 表示請求包含名為 param1 的請求參數,但其值 不能為 value1
  • {“param1=value1”, “param2”}: 請求必須包含名為 param1 和param2 的兩個請求參數,且 param1 參數的值必須為 value1!
1 @RequestMapping(value="/helloParams",params={"username","pwd!=123456"})2 public String helloParams(){3     return "success";4 }

表示請求URL中必須包含username參數,pwd可不包含,若包含pwd,則值不能為123456。

(2)Ant風格的請求URL

Ant 風格資源地址支援 3 種匹配符:

  • ?:匹配檔案名稱中的一個字元
  • *:匹配檔案名稱中的任意多個任一字元[0個字元除外!]
  • **:** 匹配多層路徑

例如:

  • /user/*/createUser: 匹配
    • /user/aaa/createUser、/user/bbb/createUser 等 URL
  • /user/**/createUser: 匹配
    • /user/createUser、/user/aaa/bbb/createUser 等 URL
  • /user/createUser??: 匹配
    • /user/createUseraa、/user/createUserbb 等 URL

(3)@PathVariable 映射 URL 綁定的預留位置
帶預留位置的 URL 是 Spring3.0 新增的功能,該功能在 SpringMVC 向 REST 目標挺進發展過程中具有裡程碑的意義

通過 @PathVariable 可以將 URL 中預留位置參數綁定到控制器處理方法的入參中:

URL 中的 {xxx} 預留位置可以通過@PathVariable("xxx") 綁定到操作方法的入參中,需要注意的是:該註解的value屬性值要與預留位置保持一致。

1 @RequestMapping(value="/helloPathVariable/{id}")2 public String helloPathVariable(@PathVariable(value="id") Integer id) throws IOException{3     System.out.println("id="+id);4     return "success";5 }

(4)method=RequestMethod.GET/POST/PUT/DELETE,可以實現REST請求風格的URL

 1 //REST請求方式-----GET擷取 2 @RequestMapping(value="/hello/{id}",method=RequestMethod.GET) 3 public String helloGet(@PathVariable(value="id") Integer id){ 4     return "success"; 5 } 6 //REST請求方式-----POST添加 7 @RequestMapping(value="/hello/{id}",method=RequestMethod.POST) 8 public String helloPost(@PathVariable(value="id") Integer id){ 9     return "success";10 }11 //REST請求方式-----PUT修改12 @RequestMapping(value="/hello/{id}",method=RequestMethod.PUT)13 public String helloPut(@PathVariable(value="id") Integer id){14     return "success";15 }16 //REST請求方式-----DELETE刪除17 @RequestMapping(value="/hello/{id}",method=RequestMethod.DELETE)18 public String helloDelete(@PathVariable(value="id") Integer id){19     return "success";20 }

如何使用REST請求風格

(5)@RequestParam

@RequestParam可以接收請求的參數,相當於Servlet的getParameter()方法!

注意:要把@RequestParam和@PathVariable區分開:

三個預設屬性:

  • value:這個欄位要與請求參數的name屬性值一致!
  • required:布爾值,預設是true,當指定為false的時候,說明這個參數不是必須的,可以不帶!
  • defaultValue:在我們不傳值的時候,預設使用defaultValue的值,傳遞參數的時候,使用我們傳遞的參數值!
1 //擷取請求參數資訊2 @RequestMapping(value="/helloReqParam")3 public String helloReqParam(@RequestParam(value="username",required=false) String username){4     System.out.println("username-------"+username);5     return SUCCESS;6 }

(6)@RequestHeader

@RequestHeader:擷取要求標頭資訊,預設屬性:

  • value:這個欄位要與請求參數的name屬性值一致!
  • required:布爾值,預設是true,當指定為false的時候,說明這個參數不是必須的,可以不帶!
  • defaultValue:在我們不傳值的時候,預設使用defaultValue的值,傳遞參數的時候,使用我們傳遞的參數值!
 1 //擷取要求標頭資訊 2 @RequestMapping(value="/helloReqHeader") 3 public String helloReqHeader(@RequestHeader(value="Accept",required=true,defaultValue="123") String accept){ 4     System.out.println("accept-------"+accept); 5     //accept-------text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 6     return "success"; 7 } 8 @RequestMapping(value="/helloReqHeader") 9 public String helloReqHeader(@RequestHeader(value="Accept1",required=true,defaultValue="123") String accept){10     System.out.println("accept-------"+accept);//accept-------12311     return "success";12 }13 @RequestMapping(value="/helloReqHeader")14 public String helloReqHeader(@RequestHeader(value="Accept1",required=true) String accept){15     System.out.println("accept-------"+accept);//400錯誤16     return "success";17 }

 

@RequestMapping映射請求,@PathVariable,@RequestParam,@RequestHeader的使用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.