「这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战」
相关文章
Java随笔记:Java随笔记
前言
- 上一章我们讲了如何通过
apis()接口扫描
- SpringBoot集成Swagger(三)apis()接口扫描 | Java随笔记 - 掘金 (juejin.cn)
- 还可以通过paths()来过滤接口!
paths()过滤
-
首先看看需要什么参数
- 点进去看看
-
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(); } 复制代码
- 重启项目看看
- 可以看到,包括
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(); } 复制代码
- 重启看结果
- 很明显了,所有的都没被展示!我全都不要!
③、PathSelectors.regex()
-
@Bean public Docket docket(){ return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .paths(PathSelectors.regex("^[+-@=](.*?)"))//该正则表示匹配所有 .build(); } 复制代码
- 重启看结果
-
@Bean public Docket docket(){ return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .paths(PathSelectors.regex("(/test)([+-@=])(.*?)"))//Java正则表达式以括号分组,表示匹配以/test开头的所有controller .build(); } 复制代码
- 重启看结果
- 这样的话结果就很明显啦!根据正则表达式来过滤哪些需要展示,哪些不需要!
- 关于正则表达式的话,后面会单独写点文章来玩一玩的!这里按下不表!
④、PathSelectors.ant()
-
@Bean public Docket docket(){ return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .paths(PathSelectors.ant("/test-swagger2/**"))//匹配/test-swagger2/开头的所有controller .build(); } 复制代码
-
重启看结果
-
-
这个也不做过多展示,只提一个小技巧。
-
当我们项目的mapping以功能划分时:
- 即test功能下所有的都被扫描到!
- 而用户功能我不加进去,那么即不会被扫描到!
总结
- any() // 任何请求都扫描
- none() // 任何请求都不扫描
- regex(final String pathRegex) // 通过正则表达式控制
- ant(final String antPattern) // 通过ant()控制
- 明天带来的就是Swagger的开关怎么玩?如何控制多环境的开关和闭合!
- 以上内容都是个人见解,如有不对,敬请指出!
路漫漫其修远兮,吾必将上下求索~
如果你认为i博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧~hahah