java - 如何将多控制器的包库设置为我的 SwaggerConfiguration?
问题描述
我的依赖....
<!-- SPRING BOOT -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
当我尝试在 swagger 中使用两个软件包库时,我的问题发生了。在下面你可以看到我对包基础的意思,在上面你可以看到我的依赖。我尝试使用两个包库的代码如下。
aPackageBase: com.companyx
bPackageBase: br.com.companyz
我不能做的事情
- 我无法更改软件包库,因为它们是巨大的 API。
- 我有超过 10 个 API 遵循这 2 个软件包基础。
- 我想使用
aPackageBase
和bPackageBase
。
当前的代码,那是行不通的...
...
String aPackageBase = "com.companyx";
String bPackageBase = "br.com.companyz";
Docket docket = new Docket(DocumentationType.OAS_30).select() //
.apis(RequestHandlerSelectors.basePackage(aPackageBase) //
.and(RequestHandlerSelectors.basePackage(bPackageBase))) // That doesn't work :(....
.paths(PathSelectors.any()).build()
...
想拥有什么...
我只想使用这两个包 base。我不想在运行时更改它,当然我可以在运行时更改它并仅使用one packageBase
,但我很厌倦为每个 API 更改它。如果我能拥有它aPackageBase
,bPackageBase
它将挽救我的生命。哈哈哈。
注意:我认为我不需要展示更多关于我的 SwaggerConfiguration 的信息,因为我的问题仅在于那部分。
解决方案
Docket
您需要稍微更改bean 定义。
Docket docket = new Docket(DocumentationType.OAS_30)
.select() //
.apis(RequestHandlerSelectors.basePackage(aPackageBase) //
.or(RequestHandlerSelectors.basePackage(bPackageBase))) // use or here, not and
.paths(PathSelectors.any())
.build();
RequestHandlerSelectors.basePackage(...)
返回一个java.util.function.Predicate
对象。
Predicate#and
要求两个条件都为真,但事实并非如此,因为任何 API 将仅存在于其中一个包中。因此Predicate#or
。
推荐阅读
- python - 基于键的字典组列表
- python - 完成索引后如何重复索引
- javascript - Crypto JS:你能在文件大小不呈指数增长的情况下减慢解密速度吗?
- python-3.x - 有没有办法让这个 python for 循环更简单?
- qt - QT如何连接SQLite数据库
- python - 在按钮运动事件上动态扩展 tkinter 文本
- string - 如何在不引入空格的情况下在多行上进行类似 Python 的字符串连接?
- go - go 中使用接口的多态性取决于 gin 中的 URI 路径
- r - 如何在 ggplot 中使用列标签作为 Y 轴?
- csv - 将csv文件导入hive表;数据包含额外的逗号,因此无法正确导入