欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring5路徑匹配器PathPattern解析

 更新時(shí)間:2021年11月24日 16:27:52   作者:生平無冕°  
這篇文章主要介紹了Spring5路徑匹配器PathPattern,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Spring5路徑匹配器PathPattern

PathPattern 對(duì)url地址匹配的處理更加快速,它和AntPathMatcher 主要差異如下:

1.PathPattern 只支持結(jié)尾部分使用 **

如果在路徑的中間使用 ** 就會(huì)報(bào)錯(cuò);

@GetMapping("/funyi/**")
public String act1() {
    return "/funyi/**";
}

2.PathPattern 支持使用例如 {*path}

的方式匹配請(qǐng)求路徑,同時(shí)可以匹配到多級(jí)路徑,并將獲取的值賦給 對(duì)應(yīng)controller方法的形參path;

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

SpringBoot 項(xiàng)目添加如下配置即可開啟PathPattern:

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

路徑匹配工具(AntPathMatcher vs PathPattern)

  • AntPathMatcher:Sping第一個(gè)版本(2013念)引入。
  • PathPattern:Spring 5 引入,所在包:org.springframework.web.util.pattern.PathPattern,所屬模塊為spring-web??梢娝鼘閃eb設(shè)計(jì)的“工具”。

PathPattern去掉了Ant字樣,但保持了很好的向下兼容性:除了不支持將**寫在path中間之外(以消除歧義),其它的匹配規(guī)則從行為上均保持和AntPathMatcher一致,并且還新增了強(qiáng)大的{*pathVariable} 的支持。整體上可認(rèn)為后者兼容了前者的功能。

  • PathPattern性能比AntPathMatcher好。理論上pattern越復(fù)雜,PathPattern的優(yōu)勢(shì)越明顯;
  • AntPathMatcher可用于非Web環(huán)境,而PathPattern只適用于Web環(huán)境。所以PathPattern也不是能完全替代AntPathMatcher的。

內(nèi)部實(shí)現(xiàn)原理上看,AntPathMatcher進(jìn)行的是純字符串操作和比對(duì);而PathPattern則對(duì)于任何一個(gè)字符串的pattern最終都會(huì)被解析為若干段的PathElement,這些PathElement以鏈?zhǔn)浇Y(jié)構(gòu)連接起來用以表示該pattern,形成一個(gè)對(duì)象數(shù)據(jù),這種結(jié)構(gòu)化的表示使得可讀性更強(qiáng)、更具靈活性,從而獲得更好的性能表現(xiàn)。

兩者簡單使用示例:

new AntPathMatcher().match("/api/v1/**", "/api/v1/2/3**");
new PathPatternParser().parse("/api/v1/**").matches(PathContainer.parsePath("/api/v1/2/3**")); 
//每一個(gè)pathPattern串對(duì)應(yīng)一個(gè)PathPatternParser、每一個(gè)parsedPath串對(duì)應(yīng)一個(gè)PathContainer

可能有小伙伴會(huì)說:在Service層,甚至Dao層我也可以正常使用PathPattern對(duì)象呀,何解?

這個(gè)問題就相當(dāng)于:HttpServletRequest屬于web層專用組件,但你依舊可以將其傳到Service層,甚至Dao層供以使用,在編譯、運(yùn)行時(shí)不會(huì)報(bào)錯(cuò)。但你可深入思考下,這么做合適嗎?

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解java各種集合的線程安全

    詳解java各種集合的線程安全

    這篇文章主要介紹了詳解java各種集合的線程安全,小編覺得挺不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • myeclipse開發(fā)servlet_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    myeclipse開發(fā)servlet_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    MyEclipse,是在eclipse基礎(chǔ)上加上自己的插件開發(fā)而成的功能強(qiáng)大的企業(yè)級(jí)集成開發(fā)環(huán)境,主要用于Java、Java EE以及移動(dòng)應(yīng)用的開發(fā)。下面這篇文章主要給大家介紹了關(guān)于myeclipse開發(fā)servlet的相關(guān)資料,需要的朋友可以參考下。
    2017-07-07
  • SpringBoot配置文件properties和yml的實(shí)現(xiàn)

    SpringBoot配置文件properties和yml的實(shí)現(xiàn)

    本文主要介紹了SpringBoot配置文件properties和yml的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 詳解Spring Security中的HttpBasic登錄驗(yàn)證模式

    詳解Spring Security中的HttpBasic登錄驗(yàn)證模式

    HttpBasic登錄驗(yàn)證模式是Spring Security實(shí)現(xiàn)登錄驗(yàn)證最簡單的一種方式,也可以說是最簡陋的一種方式,這篇文章主要介紹了Spring Security的HttpBasic登錄驗(yàn)證模式,需要的朋友可以參考下
    2019-11-11
  • java實(shí)現(xiàn)獲取安卓設(shè)備里已安裝的軟件包

    java實(shí)現(xiàn)獲取安卓設(shè)備里已安裝的軟件包

    本文給大家介紹的是如何獲取設(shè)備中已經(jīng)安裝的應(yīng)用軟件包的代碼,其核心方法原理很簡單,我們通過Android中提供的PackageManager類,來獲取手機(jī)中安裝的應(yīng)用程序信息
    2015-10-10
  • MyBatis-Plus如何關(guān)閉SQL日志打印詳解

    MyBatis-Plus如何關(guān)閉SQL日志打印詳解

    在使用mybatisplus進(jìn)行開發(fā)時(shí),日志是一個(gè)非常有用的工具,它可以幫助我們更好地了解和調(diào)試我們的代碼,這篇文章主要給大家介紹了關(guān)于MyBatis-Plus如何關(guān)閉SQL日志打印的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • JAVA構(gòu)造函數(shù)(方法)示例詳解

    JAVA構(gòu)造函數(shù)(方法)示例詳解

    構(gòu)造函數(shù),是一種特殊的方法,主要用來在創(chuàng)建對(duì)象時(shí)初始化對(duì)象,即為對(duì)象成員變量賦初始值,總與new運(yùn)算符一起使用在創(chuàng)建對(duì)象的語句中,這篇文章主要給大家介紹了關(guān)于JAVA構(gòu)造函數(shù)(方法)的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • java枚舉是如何保證線程安全的

    java枚舉是如何保證線程安全的

    這篇文章主要介紹了java枚舉是如何保證線程安全的。Java SE5提供了一種新的類型-Java的枚舉類型,關(guān)鍵字enum可以將一組具名的值的有限集合創(chuàng)建為一種新的類型,而這些具名的值可以作為常規(guī)的程序組件使用,這是一種非常有用的功能。,需要的朋友可以參考下
    2019-06-06
  • Java實(shí)現(xiàn)OJ多組測試數(shù)據(jù)的輸入方法

    Java實(shí)現(xiàn)OJ多組測試數(shù)據(jù)的輸入方法

    今天小編就為大家分享一篇Java實(shí)現(xiàn)OJ多組測試數(shù)據(jù)的輸入方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • java前后端加密解密crypto-js的實(shí)現(xiàn)

    java前后端加密解密crypto-js的實(shí)現(xiàn)

    這篇文章主要介紹了java前后端加密解密crypto-js的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05

最新評(píng)論