精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Spring Boot 請求路徑可以定義成 /**/** 這種格式嗎?

開發 前端
PathPattern 專為 Web 應用設計,它與之前的 AntPathMatcher 功能大部分比較類似,當然也有一些細微差異,這個松哥后面會說。

前兩天松哥和大家分享了 Spring Security 中如何實現權限通配符的功能,里邊用到了一個“邪門歪道” AntPathMatcher,有小伙伴對這個感到陌生,問松哥能不能單獨介紹一下這個玩意,好,安排!

不過 AntPathMatcher 其實在逐漸過時,它的替代品是 PathPattern,我就把這兩個放在一起和大家分享下。

Spring5 也已經出來好久了,里邊有一些新玩法也需要我們去慢慢揭開面紗,其中,系統分析當前請求路徑的方法位于這里:org.springframework.web.servlet.handler.AbstractHandlerMapping#initLookupPath:

protected String initLookupPath(HttpServletRequest request) {
if (usesPathPatterns()) {
request.removeAttribute(UrlPathHelper.PATH_ATTRIBUTE);
RequestPath requestPath = ServletRequestPathUtils.getParsedRequestPath(request);
String lookupPath = requestPath.pathWithinApplication().value();
return UrlPathHelper.defaultInstance.removeSemicolonContent(lookupPath);
}
else {
return getUrlPathHelper().resolveAndCacheLookupPath(request);
}
}

這個方法就是 Spring5 里邊出來的,以前是沒有這個方法的。在舊的 SpringMVC 中,當我們需要獲取當前請求地址的時候,直接通過如下方式獲取:

String lookupPath = this.getUrlPathHelper().getLookupPathForRequest(request);

但是現在變了,現在獲取當前請求 URL 地址時,方式如下:

String lookupPath = initLookupPath(request);

兩種方式相比,主要是 initLookupPath 方法中多了 usesPathPatterns 選項,這是 Spring5 中的新玩意,所以今天松哥就通過一篇簡單的文章來和大家分享一下 usesPathPatterns 到底是什么,該怎么玩!

這可不是一個小變化哦!特別是如果你在項目中使用了 WebFlux,那么這個東西就顯得尤為重要了!

1. AntPathMatcher

當我們使用 @RequestMapping 注解去標記請求接口的時候(或者使用它的類似方法如 @GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping),我們可以使用一些通配符去匹配 URL 地址,舉個簡單例子,假設我有下面五個接口:

@GetMapping("/hello/**/hello")
public String hello() {
return "/hello/**/hello";
}
@GetMapping("/h?llo")
public String hello2() {
return "/h?llo";
}
@GetMapping("/**/*.html")
public String hello3() {
return "/**/*.html";
}
@GetMapping("/hello/{p1}/{p2}")
public String hello4(@PathVariable String p1, @PathVariable String p2) {
System.out.println("p1 = " + p1);
System.out.println("p2 = " + p2);
return "/hello/{p1}/{p2}";
}
@GetMapping("/{name:[a-z-]+}-{version:\\d\\.\\d\\.\\d}{ext:\\.[a-z]+}")
public void handle(@PathVariable String name, @PathVariable String version, @PathVariable String ext) {
System.out.println("name = " + name);
System.out.println("version = " + version);
System.out.println("ext = " + ext);
}

在解釋接口的含義之前,先來說說這幾個通配符的含義:

通配符

含義

??**??

匹配0個或者多個目錄

??*??

匹配0個或者多個字符

?????

匹配任意單個字符

了解了通配符的含義,我們再來說說各個接口都能接收哪些請求:

第一個接口,可以接收諸如/hello/123/123/hello、/hello/a/hello? 以及/hello/hello? 這樣的請求,因為中間的** 代表 0 個或者多個目錄。

第二個接口,可以接收諸如/hallo、/hello、/hMllo? 之類的請求,注意它不能接收/haallo? 或者/hllo?,因為? 表示一個字符。

第三個接口可以接收任意以.html? 為后綴的請求,例如/aaa/bb/cc.html、/aa.html? 或者/aa/aa.html。

第四個接口估計大家都比較熟悉,在 RESTful 風格的接口設計中估計大家都用過,它接收的請求格式類似于/hello/aa/bb,其中參數 p1 就對應 aa,參數 p2 對應 bb。

第五個接口則用到了正則,name、version 以及 ext 三個參數格式用正則表達出來,它可以接收諸如/spring-web-3.0.5.jar? 格式的請求,最終的參數 name 就是spring-web?,version 就是3.0.5?,ext 則是.jar。

這是 SpringMVC 中之前就存在的功能,不管你用沒用過,反正它一致存在。

那么是誰支撐了這個功能呢?那就是 AntPathMatcher。

AntPathMatcher 是一個實現了 Ant 風格的路徑匹配器,Ant 風格的路徑規則實際上就是我們前面給大家介紹的那三種路徑匹配符,很 Easy。這種路徑匹配規則源自 Apache Ant 項目(https://ant.apache.org),Apache Ant 我們現在其實已經很少會用到了,它的替代品就是大家所熟知的 Maven,如果你有幸維護一些 2010 年之前的老項目的話,有可能會接觸到 Ant。

AntPathMatcher 實際上在 SpringMVC 中有非常廣泛的應用,不僅僅是在 @RequestMapping 中定義接口用到,在其他一些涉及到地址匹配的地方也會用到,例如我們在 SpringMVC 的配置文件中配置靜態資源過濾時,也是 Ant 風格路徑匹配:

<mvc:resources mapping="/**" location="/"/>

另外像攔截器里的攔截路徑注冊、跨域處理時的路徑匹配等等,都會用到 Ant 風格的路徑匹配符。

整體上來說,AntPathMatcher 是 Spring 中一種比較原始的路徑匹配解決方案,雖然比較簡單,但是它的效率很低,并且在處理 URL 編碼的時候也很不方便。

因此,才有了 Spring5 中的 PathPattern。

2. PathPattern

PathPattern 專為 Web 應用設計,它與之前的 AntPathMatcher 功能大部分比較類似,當然也有一些細微差異,這個松哥后面會說。

如果是 Servlet 應用,目前官方推薦的 URL 匹配解決方案就是 PathPattern(當然你也可以選擇較早的 AntPathMatcher),雖然官方推薦的是 PathPattern,但實際上默認使用的依然是 AntPathMatcher;如果你用的是 WebFlux,PathPattern 就是唯一解決方案了。

注意,PathPattern 是一個非常新鮮的玩藝,目前 Spring 最新版是 5.3.4,在 Spring5.3 之前,我們在 Servlet 應用中,也只能選擇 AntPathMatcher,從 Spring5.3 之后,我們才可以使用 PathPattern 了。

PathPattern 會將 URL 規則預解析為 PathContainer,它對 URL 地址匹配的處理更加快速,PathPattern 與 AntPathMatcher 的差異主要體現在兩個方面:

第一,PathPattern 只支持結尾部分使用 **?,如果在路徑的中間使用 ** 就會報錯,上文中第一個和第三個接口,在 PathPattern 模式下會報錯,如下:

圖片

因為在中間或者開始使用 **? 極易造成混亂,因此 PathPattern 只支持在結尾使用 **。

第二,PathPattern 支持使用諸如 {*path} 的方式進行路徑匹配,這種寫法也可以匹配到多層路徑,并且將匹配到的值賦值給 path 變量,例如如下一個接口:

@GetMapping("/javaboy/{*path}")
public void hello6(@PathVariable String path) {
System.out.println("path = " + path);
}

如果請求路徑是 http://localhost:8080/javaboy/aa?,那么參數 path 的值就是 /aa;

如果請求路徑是 http://localhost:8080/javaboy/aa/bb/cc/dd?,那么參數 path 的值就是 /aa/bb/cc/dd;

這個寫法也比較新穎,因為之前的 AntPathMatcher 里邊沒有這個。

3. 如何使用

默認情況下,SpringMVC 中使用的還是 AntPathMatcher,那么如何開啟 PathPattern 呢?很簡單,在 SpringBoot 項目中只需要添加如下配置即可:

@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setPatternParser(new PathPatternParser());
}
}

添加了這個配置后,在我們文章一開始貼出來的代碼里,就會進入到 if 分支中,進而使用 PathPattern 去解析請求 URL。

4. 小結

今天就和小伙伴們聊這么多,大家可以體驗一把這個東東,不過注意選擇 Spring 的版本哦,一定選擇 5.3 之上的版本!

責任編輯:武曉燕 來源: 江南一點雨
相關推薦

2021-07-28 10:30:09

UPS電源服務器

2022-08-26 01:02:31

接口privateSpring

2022-12-12 11:42:12

定義接口private

2021-04-16 11:02:40

Spring BootprivateJava

2021-08-13 08:36:15

SpringMVC自定義

2022-11-10 07:53:54

Spring參數校驗

2024-10-14 17:18:27

2023-09-19 22:41:30

控制器HTTP

2022-06-09 08:30:59

Istiospring clo

2023-11-27 08:57:24

GoGET

2021-03-07 16:41:06

URLSpring5

2023-02-13 08:10:40

Gateway網關Spring

2020-09-30 08:26:33

Spring Boot

2021-08-11 05:00:48

Spring 日志手段

2024-05-31 14:04:18

2023-12-04 07:27:54

SpringMVC方法

2024-08-01 09:10:03

2018-11-19 14:29:17

Spring BootXML支持

2024-07-31 15:57:41

2024-10-15 10:28:43

點贊
收藏

51CTO技術棧公眾號

91a在线视频| 精品欧美一区二区久久| 一区二区三区欧美在线| 国产精品无码一区二区桃花视频| 1024成人| 中文欧美日本在线资源| 秋霞午夜鲁丝一区二区| 悠悠资源网亚洲青| 中文字幕一区免费在线观看| 国内精品久久久久久久果冻传媒| 少妇又紧又色又爽又刺激视频| 亚洲一本二本| 一区二区三区在线播放欧美| 亚洲一二三四五| 巨胸喷奶水www久久久免费动漫| 日韩一区在线免费观看| 久久久久久国产精品mv| 国产免费一区二区三区最新不卡| 国产一区二区三区的电影| 精品国产一区二区三区四区在线观看| 2一3sex性hd| 精品国产一区二区三区性色av| 一本一道久久a久久精品| 粉嫩av一区二区三区天美传媒| 激情小视频在线| 国产成人免费视频一区| 国产欧美一区二区三区在线| 在线天堂中文字幕| 欧美91视频| 日韩视频免费在线| av网在线播放| 同性恋视频一区| 精品久久国产字幕高潮| 手机在线视频一区| 久久国内精品| 欧美性猛片aaaaaaa做受| 91国视频在线| 9999在线视频| 亚洲午夜日本在线观看| 亚洲av首页在线| 免费黄网站在线播放| 国产午夜精品久久| 欧美在线播放一区| 色综合888| 91在线一区二区| 国产在线一区二区三区欧美| 亚洲欧美黄色片| 国产精品一区二区在线播放| 91夜夜揉人人捏人人添红杏| 国产又粗又黄又爽视频| 久久99久久99| 成人淫片在线看| 国产乱码精品一区二区| 麻豆精品在线视频| 国产精品欧美久久久| 波多野结衣影片| 麻豆久久久久久久| 成人午夜高潮视频| 国产按摩一区二区三区| 国产精品一区二区在线观看不卡| 亚洲在线视频福利| www.国产麻豆| 99久久婷婷国产综合精品| 精品一区二区三区国产| 九色在线播放| 国产精品麻豆视频| 免费观看中文字幕| 日韩伦理av| 欧美日韩人人澡狠狠躁视频| 久草精品在线播放| 成人国产综合| 91精品福利在线一区二区三区| 久久久久久国产精品日本| jazzjazz国产精品麻豆| 日韩精品在线私人| 亚洲天堂岛国片| 国产精品久久久久一区二区三区厕所| 久久精品福利视频| 国产精品日日夜夜| 久久福利精品| 亚洲va国产va天堂va久久| 亚洲av无码乱码国产精品| 91在线高清观看| 日本不卡一区| 99在线播放| 岛国精品视频在线播放| 色综合天天色综合| 91精品国产自产在线丝袜啪| 精品亚洲一区二区三区在线播放| 久久久久亚洲AV成人无在| 亚洲理论电影网| 91sao在线观看国产| 中文字幕一区二区久久人妻| 成人免费三级在线| 日韩三级电影网站| 欧美人与性动交α欧美精品济南到| 精品欧美一区二区三区| 九九热免费在线观看| 国产精品毛片视频| 一区二区在线视频播放| 超碰手机在线观看| 丝袜脚交一区二区| 99re在线| 97电影在线看视频| 亚洲高清免费观看| 在线观看国产一级片| 韩国精品福利一区二区三区| 久久激情五月丁香伊人| 西西44rtwww国产精品| 韩国成人在线视频| 热re99久久精品国产99热| 伊人在我在线看导航| 日本电影亚洲天堂一区| av在线播放网址| 66国产精品| 国产福利视频一区| 色wwwwww| 一区二区三区不卡在线观看| 伊人影院综合在线| 久久99国产精品视频| 久久久最新网址| 国产精品无码久久久久成人app| 久久久777精品电影网影网 | 57pao精品| 99热这里只有精品在线观看| 欧美激情综合在线| 日韩激情免费视频| 我要色综合中文字幕| 日韩有码在线电影| 男操女视频网站| 久久这里只精品最新地址| 久久手机在线视频| 欧美高清hd| 久久精品国产视频| 一级做a爱片性色毛片| 久久久久高清精品| 成人小视频在线看| 日韩精品免费一区二区三区竹菊| 欧美国产日韩中文字幕在线| 国产片高清在线观看| 国产精品国产精品国产专区不蜜| 久久午夜夜伦鲁鲁一区二区| 色综合综合色| 国产福利视频一区二区| 九色在线观看| 欧美性猛交xxxx黑人交| 中文字幕伦理片| 青青草97国产精品免费观看无弹窗版| 欧美一级日本a级v片| free欧美| 综合网中文字幕| 在线观看xxxx| 亚洲丝袜自拍清纯另类| 99九九99九九九99九他书对| 亚洲一级淫片| 国产精品播放| 日韩av影片| 国产亚洲欧洲在线| 一级久久久久久久| 亚洲黄色在线视频| 中文字幕无人区二| 亚洲美女一区| 欧美一区激情视频在线观看| 国产精品久久久久久久久久齐齐 | 久久亚洲无码视频| 奇米影视一区二区三区| 伊人精品久久久久7777| 日本伊人久久| 97涩涩爰在线观看亚洲| 精品久久av| 欧美人xxxx| 久久久久久天堂| 99精品在线观看视频| 亚洲乱码国产一区三区| 天天做天天爱天天爽综合网| 成人av中文| 在线中文字幕播放| 色狠狠av一区二区三区香蕉蜜桃| 国产人妻精品一区二区三区| 亚洲成人福利片| 精品人妻互换一区二区三区 | 中文字幕视频观看| 模特精品在线| 三年中国中文在线观看免费播放 | 日本一区二区三区在线视频| 欧美高清xxx| 久久免费福利视频| 成年网站在线| 亚洲二区中文字幕| 依依成人在线视频| 亚洲国产一区二区三区青草影视| 伊人网伊人影院| 国产精品一区二区视频| 韩国一区二区av| 欧美精品一卡| 性刺激综合网| 欧美wwwsss9999| 成人激情视频在线观看| www.九色在线| 久久精品99久久久久久久久 | 91在线视频免费播放| 日韩毛片精品高清免费| 可以直接看的无码av| 国内精品写真在线观看| 日本中文字幕片| 欧美激情第8页| 少妇特黄a一区二区三区| 成人盗摄视频| 91精品视频免费看| 中文字幕av一区二区三区佐山爱| 久久久久久国产精品美女| av每日在线更新| 亚洲精品一区二区在线| www.超碰在线.com| 在线不卡欧美精品一区二区三区| 东京热一区二区三区四区| 一区二区久久久| 亚洲熟女毛茸茸| 中文字幕免费观看一区| 97人妻精品一区二区三区免| 国产高清在线精品| 成人日韩在线视频| 日韩综合小视频| 国产中文字幕视频在线观看| 韩国自拍一区| 日本黄网站色大片免费观看| 欧美伦理影院| 日韩av高清在线播放| 亚洲精品亚洲人成在线观看| 国产高清一区二区三区| 日韩精品视频一区二区三区| 国产女人18毛片水18精品| 日本美女一区| 国产91精品久久久久| 热色播在线视频| 久久久久久久香蕉网| 毛片网站在线看| 欧美男插女视频| 97caopron在线视频| 久久精品久久久久电影| 日本不卡不卡| www.欧美精品| 黄色网页在线观看| 久久精品国产亚洲精品2020| 黄色片免费在线观看| 精品国产拍在线观看| 精品视频在线一区二区| www.日韩.com| 成人日韩欧美| 欧美日韩高清区| mm视频在线视频| 97视频在线观看播放| 中文字幕 在线观看| 欧美与黑人午夜性猛交久久久| 综合久久2023| 国产精品成人一区二区| 成人精品动漫| 91亚洲精品一区| 哺乳一区二区三区中文视频| 国产区欧美区日韩区| 日韩欧美天堂| 日韩欧美视频第二区| 97精品在线| 影音先锋成人资源网站| 一区二区亚洲精品| 波多野结衣家庭教师在线播放| 性感少妇一区| a在线观看免费视频| 国产精品一色哟哟哟| 日本一卡二卡在线| 久久久99免费| 黄色a级片在线观看| 亚洲成人资源在线| 潘金莲一级淫片aaaaaa播放| 欧美日韩国产片| www.av日韩| 亚洲视频一区二区三区| 免费在线观看av片| 久久久亚洲网站| 日韩免费va| 亚洲综合自拍一区| 色天下一区二区三区| 三级三级久久三级久久18| 欧美一区亚洲| 99re在线视频免费观看| 精品一区二区三区不卡| 五十路六十路七十路熟婆| 国产日韩欧美综合在线| 中文字幕影音先锋| 欧美性猛交xxxx黑人猛交| 一级黄色片网站| 亚洲精品久久视频| 日本在线人成| 欧美有码在线视频| 国产精品白丝久久av网站| 久久国产精品一区二区三区| 99久久99久久精品国产片桃花| 国产美女在线一区| 美女国产一区二区| 性色av蜜臀av色欲av| 亚洲精品国产精华液| 4438国产精品一区二区| 欧美一级精品大片| 国产免费av高清在线| 久久久噜噜噜久久中文字免| 欧美激情啪啪| 欧美日本国产精品| 欧美日韩91| 亚洲精品自拍网| 91久色porny| 不卡的免费av| 这里只有精品电影| 91精彩视频在线播放| 欧美中文字幕在线播放| 99精品国产高清一区二区麻豆| 亚洲国产日韩美| 久久久久中文| 色婷婷免费视频| 一区二区三区在线观看国产| 欧美一级黄视频| 亚洲片av在线| 国产传媒在线观看| 国产精品一区免费观看| 欧美黄色一区| 青娱乐国产精品视频| 国产精品狼人久久影院观看方式| 国产精品久免费的黄网站| 亚洲成人久久久久| 欧美xxxx黑人又粗又长| 91精品入口蜜桃| 88国产精品视频一区二区三区| 在线免费av播放| 欧美国产精品一区二区三区| 手机看片久久久| 亚洲视频在线观看视频| 亚洲女同志freevdieo| 精品日韩美女| 一区二区黄色| 久久国产精品无码一级毛片| 欧美日韩激情小视频| 污污网站在线免费观看| 91国内免费在线视频| 久久99国产精品久久99大师| 婷婷无套内射影院| youjizz国产精品| 亚洲欧美在线视频免费| 日韩精品免费电影| 人成在线免费网站| 欧美高清视频一区二区三区在线观看| 亚洲一级在线| 天天躁日日躁aaaa视频| 色婷婷久久久亚洲一区二区三区 | 欧美激情一区二区三区在线| 波多野结衣绝顶大高潮| 一区二区三区四区精品| 久久精品97| av电影一区二区三区| 高清不卡一二三区| 国内免费精品视频| 亚洲男人天堂古典| 99久久伊人| 喜爱夜蒲2在线| 不卡一区中文字幕| www.欧美色| 精品国偷自产在线视频99| 91精品啪在线观看国产爱臀| 乱妇乱女熟妇熟女网站| 久久综合九色综合欧美98 | 日本91福利区| 搜索黄色一级片| 精品国产人成亚洲区| 国产精品专区免费| 亚洲自拍偷拍二区| 成人网在线播放| 黄色片中文字幕| 俺去了亚洲欧美日韩| 一区二区视频| 国产真人无码作爱视频免费| 中文字幕亚洲成人| 日韩一级中文字幕| 国产精品欧美风情| 亚洲午夜一级| 无码少妇精品一区二区免费动态| 欧美酷刑日本凌虐凌虐| 多野结衣av一区| 亚洲欧洲三级| av男人天堂一区| 伊人网免费视频| 91精品国产91久久久久久最新| 成人在线免费小视频| 国内精品免费视频| 欧美日韩卡一卡二| 波多野结衣中文字幕久久| 色一情一区二区三区四区| 国产成人午夜99999| 69av视频在线观看| 久久久久久久999| 欧美国产一级| 亚洲精品乱码久久久久久不卡| 555www色欧美视频|