SpringBoot整合Swagger(三)paths()介面過濾 | Java隨筆記

語言: CN / TW / HK

「這是我參與11月更文挑戰的第20天,活動詳情檢視:2021最後一次更文挑戰


相關文章

Java隨筆記:Java隨筆記


前言

paths()過濾

  • 首先看看需要什麼引數

    • image-20211122220925409.png
    • 點進去看看
    • public ApiSelectorBuilder paths(Predicate<String> selector) {        this.pathSelector = Predicates.and(this.pathSelector, selector);        return this;   }

①、PathSelectors.any()

  • 一樣的,我們先舉個例子看看

    • @Bean    public Docket docket(){        return new Docket(DocumentationType.SWAGGER_2)               .apiInfo(apiInfo())               .select()               .paths(PathSelectors.any())               .build();   }
    • image-20211122221444841.png
    • 重啟專案看看
    • image-20211122221545354.png
    • 可以看到,包括error的controller全部被掃描出來了。
  • 然後我們再進PathSelectors看看,這是什麼玩意?

    • public class PathSelectors {    private PathSelectors() {        throw new UnsupportedOperationException();   } ​    public static Predicate<String> any() {        return Predicates.alwaysTrue();   } ​    public static Predicate<String> none() {        return Predicates.alwaysFalse();   } ​    public static Predicate<String> regex(final String pathRegex) {        return new Predicate<String>() {            public boolean apply(String input) {                return input.matches(pathRegex);           }       };   } ​    public static Predicate<String> ant(final String antPattern) {        return new Predicate<String>() {            public boolean apply(String input) {                AntPathMatcher matcher = new AntPathMatcher();                return matcher.match(antPattern, input);           }       };   } }
    • 可以看出一共四個引數:any()、none()、regex()、ant()
    • 由此可以先得出第一個結論:any() 不論啥,我全都要!
  • 我們每種都玩一玩,最後再去總結每種的區別。

②、PathSelectors.none()

  • @Bean    public Docket docket(){        return new Docket(DocumentationType.SWAGGER_2)               .apiInfo(apiInfo())               .select()               .paths(PathSelectors.none())               .build();   }
  • 重啟看結果
  • image-20211122221959073.png
  • 很明顯了,所有的都沒被展示!我全都不要!

③、PathSelectors.regex()

  • @Bean    public Docket docket(){        return new Docket(DocumentationType.SWAGGER_2)               .apiInfo(apiInfo())               .select()               .paths(PathSelectors.regex("^[[email protected]=](.*?)"))//該正則表示匹配所有               .build();   }
  • 重啟看結果
  • image-20211122223432013.png
  • @Bean    public Docket docket(){        return new Docket(DocumentationType.SWAGGER_2)               .apiInfo(apiInfo())               .select()               .paths(PathSelectors.regex("(/test)([[email protected]=])(.*?)"))//Java正則表示式以括號分組,表示匹配以/test開頭的所有controller               .build();   }
  • 重啟看結果
  • image-20211122223806247.png
  • 這樣的話結果就很明顯啦!根據正則表示式來過濾哪些需要展示,哪些不需要!
  • 關於正則表示式的話,後面會單獨寫點文章來玩一玩的!這裡按下不表!

④、PathSelectors.ant()

  • @Bean    public Docket docket(){        return new Docket(DocumentationType.SWAGGER_2)               .apiInfo(apiInfo())               .select()               .paths(PathSelectors.ant("/test-swagger2/**"))//匹配/test-swagger2/開頭的所有controller               .build();   }

  • 重啟看結果

  • image-20211122224117121.png

  • 這個也不做過多展示,只提一個小技巧。

  • 當我們專案的mapping以功能劃分時:

    • image-20211122224232017.png
    • 即test功能下所有的都被掃描到!
    • 而使用者功能我不加進去,那麼即不會被掃描到!

總結

  • any() // 任何請求都掃描
  • none() // 任何請求都不掃描
  • regex(final String pathRegex) // 通過正則表示式控制
  • ant(final String antPattern) // 通過ant()控制
  • 明天帶來的就是Swagger的開關怎麼玩?如何控制多環境的開關和閉合!
  • 以上內容都是個人見解,如有不對,敬請指出!

路漫漫其修遠兮,吾必將上下求索~

如果你認為i博主寫的不錯!寫作不易,請點贊、關注、評論給博主一個鼓勵吧~hahah