1. 程式人生 > >spring mvc -@RequestMapping註解詳解

spring mvc -@RequestMapping註解詳解

支持 cnblogs 匹配 src logs www. table abc 地址

https://www.cnblogs.com/caoyc/p/5635173.html

@RequestMapping參數說明:

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

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

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

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

@RequestMapping的用法:

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

技術分享圖片
@Controller
@RequestMapping("/example")
public class ExampleController {

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

1、/example.action:執行的是excute()方法。excute()方法的@RequestMapping註解缺省value值,這種情況下,當訪問命名空間時默認執行的是這個方法。方法級別上的@RequestMapping標註是必須的,否則方法無法被正確訪問。

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

@RequestMapping(method):指定頁面請求方式

技術分享圖片
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String register(){
    return "example_register_page";
}
register

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

技術分享圖片
@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";
}
View Code

可以為多個方法映射相同的 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 值相匹配的參數的請求,處理方法才會被調用。

技術分享圖片
@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";
}
View Code

  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";
}
View Code

請求的 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註解詳解