问题描述
我的依赖......
<!-- SPRING BOOT -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
当我试图在两个包的基础上使用时,会发生我的问题。在下面可以看到我对package base的含义,在上面可以看到我的依赖关系。我尝试使用两个程序包库的代码在下面更多。
aPackageBase: com.companyx
bPackageBase: br.com.companyz
我不能做的事
- 我无法更改软件包的基础,因为它们是庞大的API。
- 在这2个软件包的基础上,我有10多个API。
- 我想使用
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()
...
想要什么...
我只想使用两个基本软件包。我并没有尝试在运行时更改它,当然我可以在运行时更改它,并且仅使用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
要求两个条件都为true,但事实并非如此,因为任何API仅存在于一个软件包中。因此Predicate#or
。