溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

二、Spring MVC的RequestMapping注解

發(fā)布時間:2020-04-30 22:14:02 來源:網絡 閱讀:13006 作者:艾斯的夢想 欄目:開發(fā)技術

    上一篇文章搭建起來了hello world。今天主要來看看RequestMapping注解都有什么用法和功能。上一篇文章說了,RequestMapping可以用來映射URL,可以用在類上,也可以用在方法上面。


    RequestMapping有以下幾個屬性:value、method、params、headers,下面簡單說一下屬性的功能

value:映射請求的url,當只定義一個url的時候,可以不寫,即以下兩種方式等價:

@RequestMapping("/testRequestMapping")
@RequestMapping(value="/testRequestMapping")

value屬性還支持通配符模式:

?:匹配單個字符

*:匹配多個字符,單層路徑匹配

**:匹配多層路徑

例如:

@RequestMapping("/user/?/ef")
可以匹配:/user/a/ef、/user/s/ef、/user/y/ef、/user/3/ef

@RequestMapping("/user/*/ef")
可以匹配:/user/adf/ef、/user/gggs/ef、/user/y/ef、/user/fdfdf/ef

@RequestMapping("/user/**")
可以匹配:/user/abc、/user/abd、/user/abc/ef


method:定義請求的方式,一共有四種:get、post、put、delete

params:請求參數的定義,定義一次請求必須傳遞的參數和參數的值

headers:定義請求的頭部,params和headers兩個不常用


其中params和headers支持簡單的表達式

param1:表示請求必須包含名為param1的請求參數
!param1:表示請求不能包含名為param1的請求參數
param1 != value1:表示請求包含參數名為param1的請求參數,但其值不能為value1
{"param1=value1", "param2"}:表示請求必須包含參數名為param1和param2的參數,
且param1的參數值必須為value1

下面結合具體的例子來看一次requestMapping注解及其屬性定義的使用方法

1、@RequestMapping注解定義在類上,我的理解,定義在類上,類似于java中的包一樣,此時方法訪問的路徑為:類路徑/方法路徑,這里為testRequestMapping/greeting

@Controller
@RequestMapping("/testRequestMapping")
public class TestRequestMappingController {
   
    @RequestMapping("/greeting")
    public String greeting() {
        return "greeting";
    }
}


2、method屬性的使用,指定請求的方式為post,如果使用get請求的話,就會出現(xiàn)404

@RequestMapping(value = "/testMethod", method = RequestMethod.POST)
public String testMethod() {
    return "greeting";
}

測試代碼,上面的鏈接會出現(xiàn)405的,見下圖:

<!-- 請求失敗,因為后面定義了請求類型為post  -->
<p>測試注解RequestMapping的method屬性,訪問失敗,因為后臺定義了請求為post方式
 <a href="/testRequestMapping/testMethod">test RequestMapping method attr</a>
 </p>


<form action="/testRequestMapping/testMethod" method="post">
    <p>請求成功,因為使用form表單,定義為post請求</p>
    <input type="submit" value="submit" />
</form>

二、Spring MVC的RequestMapping注解

3、params屬性的使用,params定義了請求的參數情況,支持表達式,支持數組

/**
 * 使用params參數指定請求參數
 * 此處示例:請求必須包含請求參數name和age,并且age的值不能為10
 * /testRequestMapping/testParams?name=Jim&age=10:請求失敗
 * /testRequestMapping/testParams?name=Jim&age=11:請求成功
 * @return
 */
@RequestMapping(value = "/testParams", params = {"name", "age!=10"})
public String testParams() {
    return "greeting";
}

測試代碼,上面的鏈接會出現(xiàn)404的:

<p>測試注解RequestMapping的params屬性,后面定義必需name和age,且age不能等于10,訪問失敗 
<a href="/testRequestMapping/testParams?name=Jim&age=10">test RequestMapping </a>
</p>

<p>測試注解RequestMapping的params屬性,后面定義必需name和age,且age不能等于10,訪問成功
 <a href="/testRequestMapping/testParams?name=Jim&age=11">test RequestMapping </a>
 </p>


4、headers屬性,定義了請求頭相關參數,我使用的時firefox瀏覽器,查看發(fā)起請求的請求頭,以設定Accept-Language進行測試:

二、Spring MVC的RequestMapping注解


下面定義了兩個方法,上面的方法和瀏覽器中的一致,可以請求成功,下面的方法請求失敗


@RequestMapping(value = "/testHedersSuccess", 
headers = {"Accept-Language=zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"})
public String testHedersSuccess() {
    return "greeting";
}

@RequestMapping(value = "/testHedersFailure", 
headers = {"Accept-Language=zh-CN,zh;q=0.8"})
public String testHedersFailure() {
    return "greeting";
}


測試代碼如下,上面的出現(xiàn)404:

<p>測試注解RequestMapping的headers屬性,失敗
 <a href="/testRequestMapping/testHedersFailure">test RequestMapping </a>
 </p>

<p>測試注解RequestMapping的headers屬性 ,成功
<a href="/testRequestMapping/testHedersSuccess">test RequestMapping </a>
</p>


5、value屬性的通配符定義,下面的示例,不能匹配多個層次,

例如不能匹配:/testWildcardPath/abc/d/ef

@RequestMapping("/testWildcardPath/*/ef")
public String testWildcardPath() {
    return "greeting";
}

測試代碼:可以把請求路徑中的any替換為任意字符串,不能批評多個層次

<p>url通配符形式 ,可以把請求路徑中的any換成任意字符,都可以成功
<a href="/testRequestMapping/testWildcardPath/any/ef">test RequestMapping </a>
</p>


6、于@PathVariable注解的配合使用,RequestMapping的value定義的url可以包含占位符,PathVariable注解就可以把url中的占位符映射到方法的參數上去

@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") int id) {
    System.out.println(id);
    return "greeting";
}

測試代碼:后面的11就是參數,方法可以接收到,也可以傳遞不同的參數

<p>PathVariable測試,11就是參數,方法可以接受到這個參數
<a href="/testRequestMapping/testPathVariable/11">test RequestMapping </a>
</p>


項目源代碼:

https://git.oschina.net/acesdream/spring-mvc


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI