如何将多控制器的包基础设置为我的 SwaggerConfiguration?

noN*_*ngo 4 java swagger springfox

我的依赖....

<!-- SPRING BOOT -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>


Run Code Online (Sandbox Code Playgroud)

当我尝试在 swagger 中使用两个软件包库时,我的问题发生了。下面你可以看到我对包基础的意思,上面你可以看到我的依赖关系。我尝试使用两个软件包基础的代码如下。

aPackageBase: com.companyx
bPackageBase: br.com.companyz
Run Code Online (Sandbox Code Playgroud)

我不能做的事情

  • 我无法更改软件包基础,因为它们是巨大的 API。
  • 我有超过 10 个 API 遵循这 2 个软件包基础。
  • 我想使用aPackageBasebPackageBase

当前代码,不起作用......

...
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()

...
Run Code Online (Sandbox Code Playgroud)

想要什么...

我只想使用两个包 base。我不想在运行时更改它,当然我可以在运行时更改它并仅使用它one packageBase,但我厌倦了为每个 API 更改它。如果我能拥有它aPackageBasebPackageBase它将拯救我的生命。哈哈哈。


注意:我认为我不需要展示更多有关我的 SwaggerConfiguration 的信息,因为我的问题仅在于该部分。

Pra*_*tel 9

您需要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();
Run Code Online (Sandbox Code Playgroud)

RequestHandlerSelectors.basePackage(...)返回一个java.util.function.Predicate对象。

Predicate#and要求两个条件都为真,但事实并非如此,因为任何 API 都只存在于其中一个包中。因此Predicate#or