@RequestParam和@PathVariable的區別和使用
請求路徑上的區別:很明顯一個是 https:url ?鍵值對,一個是https:url/引數 ,區別很明顯
@PathVariable[ˈveəriəbl]主要用於接收http://host:port/path/{引數值}資料。@RequestParam主要用於接收http://host:port/path?引數名=引數值資料,這裡後面也可以不跟引數值。
1、@RequestParam用於獲取引數,可獲取?username="sss"這種?後面的引數值
如:訪問路徑為:http://localhost:7012/billing/pay/paySerial?paySerialId=20190821155435120115620216832
@GetMapping("/paySerial") // @RequestMapping(value= "/paySerial",method =RequestMethod.GET) public PaySerialRes qryPaySerialDetail(@RequestParam(name = "paySerialId", required = false) String paySerialId) { log.info("傳入的id為;{}",paySerialId); return paySerialService.qryPaySerialDetail(paySerialId);
當傳入引數的名字和方法中的名字相同時,可以直接@RequestParam String paySerialId,或者直接省略@RequestParam,引數名字相同時,Spring預設會裝載進去,但是加上@RequestParam表示這個引數必填
如請求 url:http://localhost:7012/billing/pay/paySerial?paySerialId=20190821155435120115620216832
如果請求的引數名和方法名不一致時:則:@RequestParam(name = "abc" String paySerialId,這樣子就可以將abc和paySerialId對映上
abc和請求帶過來的引數名一樣,如:http://localhost:7012/billing/pay/paySerial?abc=20190821155435120115620216832;
@RequestParam(value = "paySerialId", required = false, defaultValue = "1") required預設為true 表示這個引數必填,設定為false則表示非必填
@RequestParam 支援下面四種引數
defaultValue 如果本次請求沒有攜帶這個引數,或者引數為空,那麼就會啟用預設值
name 繫結本次引數的名稱,要跟URL上面的一樣
required [rɪˈkwaɪəd]傳入的引數是否必須,預設是true,表示請求中一定要有相應的引數,否則將報404錯誤碼;
value 跟name一樣的作用,是name屬性的一個別名
2、使用@PathVariable接收引數,引數值需要在url進行佔位, 前端傳參的URL:url = “/main/mm/am/${Id}/${name}”
如:http://localhost:7012/billing/pay/paySerial/20190821155435120115620216832
@GetMapping("/paySerial/{aaaa}") public PaySerialRes qryPaySerialDetail(@PathVariable("aaaa") String paySerialId) { log.info("傳入的id為;{}",paySerialId); return paySerialService.qryPaySerialDetail(paySerialId); }
直接寫@PathVariable String paySerialId也是可以的,但是引數名和paySerialId要一致才行,否則就要這樣@PathVariable("aaaa") String paySerialId,建立對映關係,和上面其實差不多
PathVariable 註解的required = false 表明引數不是必需的
@PathVariable(name = "paySerialId",required = true) ,不加上name會報錯的,這裡的name和value作用應該也是一樣