@RequestMapping

@RequestMapping 參數說明

value
定義處理方法的請求的 URL 地址。
method
定義處理方法的 http method 類型,如 GET、POST 等。
params
定義請求的 URL 中必須包含的參數。
headers
定義請求中 Request Headers 必須包含的參數。html

@RequestMapping 的用法

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

ExampleController.java spring

@Controller
@RequestMapping("/example")
public class ExampleController {

   @RequestMapping
   public String execute(){
       return "example_page";
   }
   
   @RequestMapping("/todo")
   public String doSomething(){
       return "example_todo_page";
   }
   
}mvc

/example.action
執行的是 execute() 方法。execute() 方法的 @RequestMapping 註解缺省 value 值,在這種狀況下,當訪問命名空間時默認執行的是這個
方法。方法級別上的 @RequestMapping 標註是必須的,不然方法沒法被正確訪問。
/example/todo.action
執行的是 doSomething() 方法。類級別上的 @RequestMapping 標註不是必須的,在不寫的狀況下,方法上定義的 URL 都是絕對地址,不然,
方法上定義的 URL 都是相對於它所在的 Controller 的。app

@RequestMapping(method)

指定 method 的值 post

@RequestMapping(value = "/register", method = RequestMethod.GET)
public String register(){
   return "example_register_page";
}url

method 的值一旦指定,那麼,處理方法就只對指定的 http method 類型的請求進行處理。
spa

@RequestMapping(value = "/register", method = RequestMethod.GET)
public String register1(){
   return "example_register_get_page";
}

@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register2(){
   return "example_register_post_page";
}.net

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

htm

缺省 method 的值

@RequestMapping("/enter")
public String enter(){
   return "example_enter_page";
}

method 如果缺省沒指定,並非說它默認只處理 GET 方式的請求,而是它能夠處理任何方式的 http method 類型的請求。
指定 method 是爲了細化映射 ( 縮小處理方法的映射範圍 ),在 method 沒有指定的狀況下,它的映射範圍是最大的。

@RequestMapping(params)

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

@RequestMapping(value = "/find", params = "target")
public String find1(){
   return "example_find1_page";
}

@RequestMapping(value = "/find", params = "!target")
public String find2(){
   return "example_find2_page";
}

@RequestMapping(value = "/search", params = "target=product")
public String search1(){
   return "example_search1_page";
}

@RequestMapping(value = "/search", params = "target!=product")
public String search2(){
   return "example_search2_page";
}

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 值相匹配的參數,處理方法纔會被調用。

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

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

源代碼下載

springmvc-request-mapping.zip

相關文章
相關標籤/搜索