Spring MVC @RequestMapping註解詳解

來源:互聯網
上載者:User

標籤:

@RequestMapping 參數說明

  value:定義處理方法的請求的 URL 地址。(重點)

  method:定義處理方法的 http method 類型,如 GET、POST 等。(重點)

  params:定義請求的 URL 中必須包含的參數。或者不包含某些參數。(瞭解)

  headers:定義請求中 Request Headers 必須包含的參數。或者不包含某些參數。(瞭解)

 

 

@RequestMapping 的用法

  @RequestMapping 有兩種標註方式,一種是標註在類層級上,一種是標註在方法層級上。標註在方法上時,value 表示訪問該方法的 URL 地址。標註在類上時,value 相當於一個命名空間,即訪問該 Controller 下的任意方法都需要帶上這個命名空間。例如:

Java代碼

 1 @Controller 2 @RequestMapping("/example") 3 public class ExampleController { 4  5     @RequestMapping 6     public String execute(){ 7         return "example_page"; 8     } 9     10     @RequestMapping("/todo")11     public String doSomething(){12         return "example_todo_page";13     }14     15 }

  1:/example.action:執行的是 execute() 方法。execute() 方法的 @RequestMapping 註解預設 value 值,在這種情況下,當訪問命名空間時預設執行的是這個方法。方法層級上的 @RequestMapping 標註是必須的,否則方法無法被正確訪問。

  2:/example/todo.action執行的是 doSomething() 方法。類層級上的 @RequestMapping 標註不是必須的,在不寫的情況下,方法上定義的 URL 都是絕對位址,否則,方法上定義的 URL 都是相對於它所在的 Controller 的。

 

@RequestMapping(method):指定頁面請求方式
1 @RequestMapping(value = "/register", method = RequestMethod.GET)2 public String register(){3     return "example_register_page";4 }

  method 的值一旦指定,那麼,處理方法就只對指定的 http method 類型的請求進行處理。 這裡方法/register只能使用get請求,使用post請求無法訪問

1 @RequestMapping(value = "/register", method = RequestMethod.GET)2 public String register1(){3     return "example_register_get_page";4 }5 6 @RequestMapping(value = "/register", method = RequestMethod.POST)7 public String register2(){8     return "example_register_post_page";9 }

  可以為多個方法映射相同的 URI,不同的 http method 類型,Spring MVC 根據請求的 method 類型是可以區分開這些方法的。當 /example/register.action 是以 GET 的方式提交的時候,Spring MVC 調用 register1() 來處理請求;若是以 POST 的方式提交,則調 register2() 來處理提交的請求。

  method 若是預設沒指定,並不是說它預設只處理 GET 方式的請求,而是它可以處理任何方式的 http method 類型的請求。指定 method 是為了細化映射 ( 縮小處理方法的對應範圍 ),在 method 沒有指定的情況下,它的對應範圍是最大的。

 

@RequestMapping(params)

  與 method 相類似,作用是為了細化映射。只有當 URL 中包含與 params 值相匹配的參數的請求,處理方法才會被調用。

 1 @RequestMapping(value = "/find", params = "target") 2 public String find1(){ 3     return "example_find1_page"; 4 } 5  6 @RequestMapping(value = "/find", params = "!target") 7 public String find2(){ 8     return "example_find2_page"; 9 }10 11 @RequestMapping(value = "/search", params = "target=product")12 public String search1(){13     return "example_search1_page";14 }15 16 @RequestMapping(value = "/search", params = "target!=product")17 public String search2(){18     return "example_search2_page";19 }

  find1():請求的 URL 中必須要有 target 參數,才能夠到達此方法。如 /example/find.action?target 或 /example/find.action?target=x 等

  find2():請求的 URL 中必須不能有 target 參數,才能夠到達此方法。如 /example/find.action 或 /example/find.action?q=x 等

  search1():請求的 URL 中必須要有 target=product 參數,才能夠到達此方法。如 /example/search.action?target=product 等

  search2():請求的 URL 中必須不能有 target=product 參數,才能夠到達此方法。如 /example/search.action?target=article 等

 

 

@RequestMapping(headers)

  headers 的作用也是用於細化映射。只有當請求的 Request Headers 中包含與 heanders 值相匹配的參數,處理方法才會被調用。 

 

1 @RequestMapping(value = "/specify", headers = "accept=text/*")2 public String specify(){3     return "example_specify_page";4 }

 

  請求的 Request Headers 中 Accept 的值必須匹配 text/* ( 如 text/html ),方法才會被調用。

 

@RequestMapping支援Ant風格的萬用字元
萬用字元 說明 樣本
? 匹配一個任一字元 /a/?b 可以匹配/a/ab;/a/cb。但不能匹配/a/acb之類
* 匹配任意長度的字元 /a/ *b可以匹配/a/cb;/a/acb。但不能匹配/a/cb/vb
** 匹配多層路徑 可以匹配/a/ab;/a/acb;/a/ab/abc/…/…

 

Spring MVC @RequestMapping註解詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.