1. 程式人生 > >@RequestMapping註解的用法

@RequestMapping註解的用法

標籤:

@RequestMapping有如下屬性值:

@RequestMapping
     name():String
     value():String[]
     method():RequestMethod[]
     params():String[]
     headers():String[]
     consumes():String[]
     produces():String[]

1、@RequestMapping來對映URL
註解 @RequestMapping 可以用在類定義處和方法定義處。
類定義處:規定初步的請求對映,相對於web應用的根目錄;
方法定義處

:進一步細分請求對映,相對於類定義處的URL。如果類定義處沒有使用該註解,則方法標記的URL相對於根目錄而言;

package com.springmvc.helloworld_1;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping(value="/example")
public class HelloWorld {

    @RequestMapping
("/helloworld") public String hello(){ System.out.println("hello world"); return "success"; } }

  如果去掉類定義處的@RequestMapping(value=”/example”),那麼hello()方法的對映地址就變為了:http://localhost:8080/springMVC/helloworld

  還有一個注意的,@RequestMapping的預設屬性為value,所以@RequestMapping(value=”/example”)和@RequestMapping(“/example”)是等價的

2、@RequestMapping除了可以指定URL對映外,還可以指定“請求方法、請求引數和請求頭”的對映請求
註解的value、method、params及headers分別指定“請求的URL、請求方法、請求引數及請求頭”。它們之間是與的關係,聯合使用會使得請求的對映更加精細。
  2.1 method屬性可以指定請求的型別,http中規定請求有四種類型:get,post,put,delete。其值在列舉型別RequestMethod中有規定。

    例如:@RequestMapping(value=”/helloworld”, method=RequestMethod.DELETE) 指定只有DELETE方式的helloworld請求才能夠執行該處理方法。

  2.2 params和headers支援簡單的表示式:
  —— params1:表示請求必須包含名為params1的請求引數
   —— !params1:表示請求不能包含名為params1的請求引數
  —— params1 != value1:表示請求必須包含名為params1的請求引數,但是其值不能是value1
  —— {“params1 = value1”, “param2”}:表示請求必須包含名為params1和params2兩個請求引數,且params1的值必須為value1

  2.3 Ant風格資源地址支援3種萬用字元:
   —— ? : 匹配檔名中的一個字元
   —— * : 匹配檔名中的任意多個字元(至少有一個字元)
   —— ** : 匹配多層路徑(至少有一層)

    @RequestMapping支援Ant風格的URL:

    —— /user/create?? 匹配/user/createAA、/user/createBB等URL (??匹配任意兩個字元)
   —— /user//createUser 匹配/user/aaa/createUser、/user/bbb/createUser等URL (匹配任意字元)
   —— /user//createUser 匹配/user/createUser、/user/aaa/bbb/createUser等URL (匹配任意多層路徑)

    注意:其?和*必須要有,如果為空,則不符合

  2.4 @PathVariable 對映URL繫結的佔位符
  可以在控制器處理方法的入參中使用 @PathVariable 獲取到URL中佔位符引數。 URL中的{xxx}佔位符可以通過 @PathVariable(“xxx”) 繫結到操作方法的入參中。

@RequestMapping("/delete/{id}")
public String testPathVariable(@PathVariable("id") Integer id){
    System.out.println("id = " + id);

    return SUCCESS;
}

  下面是示例類將上面的知識點做了總結和應用示範:

package com.springmvc.RequestMapping_2;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("/springmvc")
public class RequestMappingTest {

    private static final String SUCCESS = "success"; 

    /**
     * 註解 @RequestMapping 可以用在類定義處和方法定義處
     * 1、類定義處:規定初步的請求對映,相對於web應用的根目錄
     * 2、方法定義處:進一步細分請求對映,相對於類定義處的URL。如果類定義處沒有使用該註解,則方法標記的URL相對於根目錄而言
     * 
     * 所以,testRequestMappingURL方法對應的URL目錄為:/springmvc/testRequestMappingURL
     */
    @RequestMapping("/testRequestMappingURL")
    public String testRequestMappingURL(){
        System.out.println("testRequestMappingURL 方法...");

        return SUCCESS;
    }

    /**
     * 1、瞭解:可以指定params和headers引數。
     * 
     * params和headers的值規定了:
     * ①、請求引數必須包含param,和view。而且,view的值必須為true
     * ②、請求頭中必須包含有Accept-Language,而且其值必須為zh-CN,zh;q=0.8
     */
    @RequestMapping(value="/testParamsAndHearders", 
                    params={"view=true","param"}, 
                    headers={"Accept-Language=zh-CN,zh;q=0.8"})
    public String testParamsAndHearders(){
        System.out.println("testParamsAndHearders 方法...");

        return SUCCESS;
    }

    /**
     * 2、Ant風格的佔位符。
     * —— ?  : 匹配檔名中的一個字元
     * —— *  : 匹配檔名中的任意個字元(至少有一個)
     * —— ** : 匹配多層路徑(至少有一層)
     */
    @RequestMapping(value="/*/testAnt??")
    public String testAntPath(){
        System.out.println("testAntPath 方法...");

        return SUCCESS;
    }

    /**
     * 3、通過method指定請求方式必須是POST請求
     */
    @RequestMapping(value="/testMethod", method=RequestMethod.POST)
    public String testMethod(){
        System.out.println("testMethod 方法...");

        return SUCCESS;
    }

    /**
     * 4、可以使用註解@PathVariable("id")將@RequestMapping中的引數提取出來傳遞到方法的入參中
     */
    @RequestMapping("/delete/{id}")
    public String testPathVariable(@PathVariable("id") Integer id){
        System.out.println("id = " + id);

        return SUCCESS;
    }
}