請求路徑上的區別:很明顯一個是 https:url ?鍵值對,一個是https:url /參數 ,區別很明顯
@PathVariable主要用於接收http://host:port/path/{參數值}數據。@RequestParam主要用於接收http://host:port/path?參數名=參數值數據,這里后面也可以不跟參數值。
@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,如請求 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")
@RequestParam 支持下面四種參數
defaultValue 如果本次請求沒有攜帶這個參數,或者參數為空,那么就會啟用默認值
name 綁定本次參數的名稱,要跟URL上面的一樣
required 傳入的參數是否必須,默認是true,表示請求中一定要有相應的參數,否則將報404錯誤碼;
value 跟name一樣的作用,是name屬性的一個別名
使用@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作用應該也是一樣