二、@RequestMapping註解的用法

@RequestMapping有以下屬性值:web

一、@RequestMapping來映射URL
    註解 @RequestMapping 能夠用在類定義處和方法定義處。
    類定義處:規定初步的請求映射,相對於web應用的根目錄;
    方法定義處:進一步細分請求映射,相對於類定義處的URL。若是類定義處沒有使用該註解,則方法標記的URL相對於根目錄而言;spring

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

  上面代碼在類定義處指定映射爲"/example",在hello()方法處指定爲"/helloworld"。那麼hello()方法的URL映射地址爲:http://localhost:8080/springMVC/example/helloworldmvc

  若是去掉類定義處的@RequestMapping(value="/example"),那麼hello()方法的映射地址就變爲了:http://localhost:8080/springMVC/helloworldapp

  還有一個注意的@RequestMapping的默認屬性爲value,因此@RequestMapping(value="/example")和@RequestMapping("/example")是等價的post


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

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

  2.2 params和headers支持簡單的表達式:
       ——  params1:表示請求必須包含名爲params1的請求參數
       ——  !params1:表示請求不能包含名爲params1的請求參數
       ——  params1 != value1:表示請求必須包含名爲params1的請求參數,可是其值不能是value1
       ——  {"params1 = value1", "param2"}:表示請求必須包含名爲params1和params2兩個請求參數,且params1的值必須爲value1

  2.3 Ant風格資源地址支持3種通配符:
       —— ?   : 匹配文件名中的一個字符
       —— *   : 匹配文件名中的任意多個字符(至少有一個字符)
       —— ** : 匹配多層路徑(至少有一層)blog

    @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 (**匹配任意多層路徑)get

    注意:其?和*必需要有,若是爲空,則不符合    
    
  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 能夠用在類定義處和方法定義處
     * 一、類定義處:規定初步的請求映射,相對於web應用的根目錄
     * 二、方法定義處:進一步細分請求映射,相對於類定義處的URL。若是類定義處沒有使用該註解,則方法標記的URL相對於根目錄而言
     * 
     * 因此,testRequestMappingURL方法對應的URL目錄爲:/springmvc/testRequestMappingURL
     */
    @RequestMapping("/testRequestMappingURL")
    public String testRequestMappingURL(){
        System.out.println("testRequestMappingURL 方法...");
        
        return SUCCESS;
    }
    
    /**
     * 一、瞭解:能夠指定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;
    }
    
    /**
     * 二、Ant風格的佔位符。
     * —— ?  : 匹配文件名中的一個字符
     * —— *  : 匹配文件名中的任意個字符(至少有一個)
     * —— ** : 匹配多層路徑(至少有一層)
     */
    @RequestMapping(value="/*/testAnt??")
    public String testAntPath(){
        System.out.println("testAntPath 方法...");
        
        return SUCCESS;
    }
    
    /**
     * 三、經過method指定請求方式必須是POST請求
     */
    @RequestMapping(value="/testMethod", method=RequestMethod.POST)
    public String testMethod(){
        System.out.println("testMethod 方法...");
        
        return SUCCESS;
    }
    
    /**
     * 四、能夠使用註解@PathVariable("id")將@RequestMapping中的參數提取出來傳遞到方法的入參中
     */
    @RequestMapping("/delete/{id}")
    public String testPathVariable(@PathVariable("id") Integer id){
        System.out.println("id = " + id);
        
        return SUCCESS;
    }
}
相關文章
相關標籤/搜索