SpringBoot集成Swagger(三)paths()接口过滤 | Java随笔记

5,720 阅读2分钟

「这是我参与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("^[+-@=](.*?)"))//该正则表示匹配所有
                    .build();
        }
    
  • 重启看结果
  • image-20211122223432013.png
  •     @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()

  •     @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