SpringBoot集成Swagger(三)paths()接

「这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战


相关文章

Java随笔记:Java随笔记


前言

paths()过滤

  • 首先看看需要什么参数
+ ![image-20211122220925409.png](https://gitee.com/songjianzaina/juejin_p7/raw/master/img/4bb79128ea49ef19e63a8e6066909a92df94ca9de80f071ec9d34a18f836b0ce)
+ 点进去看看
+ 
1
2
3
4
kotlin复制代码    public ApiSelectorBuilder paths(Predicate<String> selector) {
       this.pathSelector = Predicates.and(this.pathSelector, selector);
       return this;
  }

①、PathSelectors.any()

  • 一样的,我们先举个例子看看
+ 
1
2
3
4
5
6
7
8
scss复制代码 @Bean
   public Docket docket(){
       return new Docket(DocumentationType.SWAGGER_2)
              .apiInfo(apiInfo())
              .select()
              .paths(PathSelectors.any())
              .build();
  }
+ ![image-20211122221444841.png](https://gitee.com/songjianzaina/juejin_p7/raw/master/img/81b1a7c97a0183a08fb915863c4413bf60b6ad088e3597324130e4f1695dcb29) + 重启项目看看 + ![image-20211122221545354.png](https://gitee.com/songjianzaina/juejin_p7/raw/master/img/b583cd1c252fc3f72cabe941a678b62837fb3530ec12852d716bbbd183ea99c3) + 可以看到,包括`error`的controller全部被扫描出来了。
  • 然后我们再进PathSelectors看看,这是什么玩意?
+ 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
typescript复制代码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()

  • 1
    2
    3
    4
    5
    6
    7
    8
    scss复制代码    @Bean
       public Docket docket(){
           return new Docket(DocumentationType.SWAGGER_2)
                  .apiInfo(apiInfo())
                  .select()
                  .paths(PathSelectors.none())
                  .build();
      }
  • 重启看结果

  • image-20211122221959073.png

  • 很明显了,所有的都没被展示!我全都不要!

③、PathSelectors.regex()

  • 1
    2
    3
    4
    5
    6
    7
    8
    scss复制代码    @Bean
       public Docket docket(){
           return new Docket(DocumentationType.SWAGGER_2)
                  .apiInfo(apiInfo())
                  .select()
                  .paths(PathSelectors.regex("^[+-@=](.*?)"))//该正则表示匹配所有
                  .build();
      }
  • 重启看结果

  • image-20211122223432013.png

  • 1
    2
    3
    4
    5
    6
    7
    8
    scss复制代码    @Bean
       public Docket docket(){
           return new Docket(DocumentationType.SWAGGER_2)
                  .apiInfo(apiInfo())
                  .select()
                  .paths(PathSelectors.regex("(/test)([+-@=])(.*?)"))//Java正则表达式以括号分组,表示匹配以/test开头的所有controller
                  .build();
      }
  • 重启看结果

  • image-20211122223806247.png

  • 这样的话结果就很明显啦!根据正则表达式来过滤哪些需要展示,哪些不需要!

  • 关于正则表达式的话,后面会单独写点文章来玩一玩的!这里按下不表!

④、PathSelectors.ant()

  • 1
    2
    3
    4
    5
    6
    7
    8
    scss复制代码    @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](https://gitee.com/songjianzaina/juejin_p7/raw/master/img/4465d72695c9259de8c87ff2039095f1b04e2f171caba4b1b00625244723e02e)
+ 即test功能下所有的都被扫描到!
+ 而用户功能我不加进去,那么即不会被扫描到!

总结

  • any() // 任何请求都扫描
  • none() // 任何请求都不扫描
  • regex(final String pathRegex) // 通过正则表达式控制
  • ant(final String antPattern) // 通过ant()控制
  • 明天带来的就是Swagger的开关怎么玩?如何控制多环境的开关和闭合!
  • 以上内容都是个人见解,如有不对,敬请指出!

路漫漫其修远兮,吾必将上下求索~

如果你认为i博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧~hahah

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%