一、代碼實例
首先,上兩個地址:
地址1:http://localhost:8989/SSSP/emps?pageNo=2
地址2:http://localhost:8989/SSSP/emp/7
如果想獲取地址1中的 pageNo的值 ‘2’ ,則使用 @RequestParam ,
如果想獲取地址2中的 emp/7 中的 ‘7 ’ 則使用 @PathVariable
實例如下:
@RequestMapping(value="/getTaobao") public List<Taobao> doAddTaobao(@RequestParam(required = false) Integer status){ return taobaoService.getTaobao(status); } @RequestMapping(value = "/auditTaobao/{id}") public void doAuditTaobao(@PathVariable Integer id){ taobaoService.auditTaobao(id); }
大道理不講,原理也不分析就記憶一點,那一點呢? 看‘這個符號‘?’
1、若獲取的入參的 參數 是下面這種形式 就使用 @requestParam 去獲取 參數‘2’
/emps?pageNo=2
2、若獲取的入參的 參數 是下面這種形式 就使用 @PathVariable 去獲取參數 ‘7’
/emp/7
二、詳細講解
RequestParam 漢語意思就是: 請求參數。顧名思義 就是獲取參數的
PathVariable 漢語意思是:路徑變量。顧名思義,就是要獲取一個url 地址中的一部分值,那一部分呢?
RequestMapping 上說明了@RequestMapping(value="/emp/{id}"),我就是想獲取你URL地址 /emp/ 的后面的那個 {id}的
@PathVariable是用來獲得請求url中的動態參數的
因此,就看‘?’ 若是想獲取 ‘?’ 后面的pageNo 的值 ‘2’, 就使用RequestParam 。若想獲取的是url 地址的一部分 ‘7’ 就使用PathVariable
1、@pathVariable和RequestParam的區別:
顧名思義,前者是從路徑中獲取變量,也就是把路徑當做變量,后者是從請求里面獲取參數,從請求來看:
/Springmvc/user/page.do?pageSize=3&pageNow=2
pageSize和pageNow應該是屬於參數而不是路徑,所以應該添加@RequestParam的注解。
如果做成如下URL,則可以使用@PathVariable
someUrl/{paramId},這里的paramId是路徑中的變量,應使用@pathVariable
2、使用
@PathVariable
當使用@RequestMapping URI template 樣式映射時, 即 someUrl/{paramId},這時的paramId可通過 @Pathvariable注解綁定它傳過來的值到方法的參數上。
@RequestParam
(1)常用來處理簡單類型的綁定,通過Request.getParameter() 獲取的String可直接轉換為簡單類型的情況( String--> 簡單類型的轉換操作由ConversionService配置的轉換器來完成);因為使用request.getParameter()方式獲取參數,所以可以處理get 方式中queryString的值,也可以處理post方式中 body data的值;
(2)用來處理Content-Type: 為 application/x-www-form-urlencoded
編碼的內容,提交方式GET、POST;
(3) 該注解有兩個屬性: value、required; value用來指定要傳入值的id名稱,required用來指示參數是否必須綁定;