springboot開啟矩陣傳參MatrixVariable


 
        
/**
*   根據 URI 規范 RFC 3986 中 URL 的定義,路徑片段中可以可以包含鍵值對。
* 規范中沒對對應的術語。一般 “URL 路徑參數” 可以被應用,盡管更加獨特的 “矩陣 URI” 也經常被使用並且相當有名。
* 在 Spring MVC 它被成為矩陣變量
* 矩陣變量可以出現在任何路徑片段中,每一個矩陣變量都用分號(;)隔開。
* 比如 “/cars;color=red;year=2012”。
* 多個值可以用逗號隔開,比如 “color=red,green,blue”,或者分開寫 “color=red;color=green;color=blue”。
*
*     如果你希望一個 URL 包含矩陣變量,那么請求映射模式必須用 URI 模板來表示這些矩陣變量。
* 這樣的話,不管矩陣變量順序如何,都能夠保證請求可以正確的匹配。
* Springboot 默認是無法使用矩陣變量綁定參數的。需要覆蓋WebMvcConfigurer中的configurePathMatch方法。
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
UrlPathHelper urlPathHelper=new UrlPathHelper();
urlPathHelper.setRemoveSemicolonContent(false);
configurer.setUrlPathHelper(urlPathHelper);
}
}





/**
* Spring也支持URL
* 中的矩陣變量,所謂矩陣變量,就是出現在路徑片段中,通過符號“;”
* 分割的多個變量,比如/user/id=123 ;status= l/update.json
*/
@GetMapping(value = "/owners/{ownerId}/pets/{petId}")
public void ju(@PathVariable String ownerId,
@PathVariable String petId,@MatrixVariable(value="q", pathVar="ownerId") String q1,
@MatrixVariable(value="q", pathVar="petId") String q2) {
System.out.println("id:"+q1+":"+"df:"+q2);
System.out.println("ownerId:"+ownerId+":"+"petId:"+petId);
System.out.println("123456789");
}




//            /s1/1;a=1/s2/2;b=2/s3/3;c=3
// (1). pathVar = "s1" ,意味着處理范圍為: 1;a=1
// (2). value = "a", 指定pathVar里的 變量a。
// (3). required = false , url可以沒有這個變量a,c默認是true。
默認情況下即為true情況下缺少變量會拋異常
異常:{
{
  "timestamp": "2020-06-17T02:31:29.760+0000",
  "status": 404,
  "error": "Not Found",
  "message": "No message available",
  "path": "/owners//owners/2;q\u003d1/pets/3"
}

}
//預測 s1,s2,s3一次為1,2,3
//a為1 b,c為null

@GetMapping(value ="/s1/{s1}/s2/{s2}/s3/{s3}")
public void zhen(@PathVariable String s1,
@PathVariable String s2,
@PathVariable String s3,
@MatrixVariable(value="a", pathVar="s1") String a,
@MatrixVariable(value="b", pathVar="s2",required =false) String b,
@MatrixVariable(value="c", pathVar="s3",required =false) String c){
System.out.println("s1=====》"+s1);
System.out.println("s1=====》"+s2);
System.out.println("s1=====》"+s3);
System.out.println("a======》"+a);
System.out.println("b======》"+b);
System.out.println("c======》"+c);

}


免責聲明!

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



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