SpringMVC--@RequestMapping注解以及SpringMVC獲取請求參數


三、@RequestMapping注解

1、@RequestMapping注解的功能

@RequestMapping注解的作用就是將請求和處理請求的控制器方法關聯 起來,建立映射關系。

SpringMVC 接收到指定的請求,就會來找到在映射關系中對應的控制器方法來處理這個請求。

注意:在使用@RequestMapping注解的時候,要保證在所有的控制器中所能匹配到的請求地址是唯一的;

2、@RequestMapping注解的位置

@RequestMapping標識一個類:設置映射請求的請求路徑的初始信息

@RequestMapping標識一個方法:設置映射請求請求路徑的具體信息

注意:如果類和方法上都有路徑信息,那么要先訪問初始信息在訪問具體信息,HTML路徑要兩個都寫(一般用於不同模塊同名請求路徑的處理)

 3、@RequestMapping注解的value屬性

@RequestMapping注解的value屬性通過請求的請求地址匹配請求映射

@RequestMapping注解的value屬性是一個字符串類型的數組,表示該請求映射能夠匹配多個請求地址 所對應的請求

@RequestMapping注解的value屬性必須設置,至少通過請求地址匹配請求映射

 4、@RequestMapping注解的method屬性

@RequestMapping注解的method屬性通過請求的請求方式(get或post)匹配請求映射

@RequestMapping注解的method屬性是一個RequestMethod類型的數組,表示該請求映射能夠匹配 多種請求方式的請求 若當前請求的請求地址滿足請求映射的value屬性,但是請求方式不滿足method屬性,則瀏覽器報錯 405:Request method 'POST' not supported,設置多個參數不必同時滿足!

 注意:

1、對於處理指定請求方式的控制器方法,SpringMVC中提供了@RequestMapping的派生注解

處理get請求的映射-->@GetMapping

處理post請求的映射-->@PostMapping

處理put請求的映射-->@PutMapping

處理delete請求的映射-->@DeleteMapping

可以直接使用以上注解代替method參數!

2、常用的請求方式有get,post,put,delete

但是目前瀏覽器只支持get和post,若在form表單提交時,為method設置了其他請求方式的字符 串(put或delete),則按照默認的請求方式get處理

若要發送put和delete請求,則需要通過spring提供的過濾器HiddenHttpMethodFilter,在 RESTful部分會講到,設置多個參數不必同時滿足!

5、@RequestMapping注解的params屬性(了解)

@RequestMapping注解的params屬性通過請求的請求參數匹配請求映射

@RequestMapping注解的params屬性是一個字符串類型的數組,可以通過四種表達式設置請求參數 和請求映射的匹配關系

"param":要求請求映射所匹配的請求必須攜帶param請求參數

"!param":要求請求映射所匹配的請求必須不能攜帶param請求參數

"param=value":要求請求映射所匹配的請求必須攜帶param請求參數且param=value

"param!=value":要求請求映射所匹配的請求必須攜帶param請求參數但是param!=value

 

 注: 若當前請求滿足@RequestMapping注解的value和method屬性,但是不滿足params屬性,

此時 頁面回報錯400:Parameter conditions "username, password!=123456" not met for actual request parameters: username={admin}, password={123456},設置多個參數必須同時滿足!

 

 

6、@RequestMapping注解的headers屬性(了解)

@RequestMapping注解的headers屬性通過請求的請求頭信息匹配請求映射

@RequestMapping注解的headers屬性是一個字符串類型的數組,可以通過四種表達式設置請求頭信 息和請求映射的匹配關系

"header":要求請求映射所匹配的請求必須攜帶header請求頭信息

"!header":要求請求映射所匹配的請求必須不能攜帶header請求頭信息

"header=value":要求請求映射所匹配的請求必須攜帶header請求頭信息且header=value

"header!=value":要求請求映射所匹配的請求必須攜帶header請求頭信息且header!=value

若當前請求滿足@RequestMapping注解的value和method屬性,但是不滿足headers屬性,此時頁面 顯示404錯誤,即資源未找到,設置多個參數必須同時滿足!

7、SpringMVC支持ant風格的路徑(模糊匹配)

?:表示任意的單個字符(/ ? 不寫都不可以)

*:表示任意的0個或多個字符

**:表示任意的一層或多層目錄

注意:在使用**時,只能使用/**/xxx的方式

8、SpringMVC支持路徑中的占位符(重點)

原始方式:/deleteUser?id=1

rest方式:/deleteUser/1

SpringMVC路徑中的占位符常用於RESTful風格中,當請求路徑中將某些數據通過路徑的方式傳輸到服務器中,就可以在相應的@RequestMapping注解

的value屬性中通過占位符{xxx}表示傳輸的數據,在通過@PathVariable注解,將占位符所表示的數據賦值給控制器方法的形參

 

 四、SpringMVC獲取請求參數

1、通過ServletAPI獲取

將HttpServletRequest作為控制器方法的形參,此時HttpServletRequest類型的參數表示封裝了當前請 求的請求報文的對象

 2、通過控制器方法的形參獲取請求參數

在控制器方法的形參位置,設置和請求參數同名的形參,當瀏覽器發送請求,匹配到請求映射時,在 DispatcherServlet中就會將請求參數賦值給相應的形參

 

 注:

若請求所傳輸的請求參數中有多個同名的請求參數,此時可以在控制器方法的形參中設置字符串、數組或者字符串類型的形參接收此請求參數

若使用字符串數組類型的形參,此參數的數組中包含了每一個數據

若使用字符串類型的形參,此參數的值為每個數據中間使用逗號拼接的結果

3、@RequestParam

@RequestParam是將請求參數和控制器方法的形參創建映射關系

@RequestParam注解一共有三個屬性:

value:指定為形參賦值的請求參數的參數名

required:設置是否必須傳輸此請求參數,默認值為true 

                若設置為true時,則當前請求必須傳輸value所指定的請求參數,

                若沒有傳輸該請求參數,且沒有設置 defaultValue屬性,則頁面報錯400:Required String parameter 'xxx' is not present;

                若設置為 false,則當前請求不是必須傳輸value所指定的請求參數,若沒有傳輸,則注解所標識的形參的值為 null

defaultValue:不管required屬性值為true或false,當value所指定的請求參數沒有傳輸或傳輸的值 為""時,則使用默認值為形參賦值

4、@RequestHeader

@RequestHeader是將請求頭信息和控制器方法的形參創建映射關系

@RequestHeader注解一共有三個屬性:value、required、defaultValue,用法同@RequestParam

5、@CookieValue

@CookieValue是將cookie數據和控制器方法的形參創建映射關系

@CookieValue注解一共有三個屬性:value、required、defaultValue,用法同@RequestParam

6、通過POJO獲取請求參數

可以在控制器方法的形參位置設置一個實體類類型的形參,此時若瀏覽器傳輸的請求參數的參數名和實 體類中的屬性名一致,那么請求參數就會為此屬性賦值   

 7、解決獲取請求參數的亂碼問題

解決獲取請求參數的亂碼問題,可以使用SpringMVC提供的編碼過濾器CharacterEncodingFilter,但是 必須在web.xml中進行注冊

 注: SpringMVC中處理編碼的過濾器一定要配置到其他過濾器之前,否則無效


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM