1. 程式人生 > 其它 >@RequestParam和@PathVariable的區別和使用

@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作用應該也是一樣