首页 > 解决方案 > 如何将多控制器的包库设置为我的 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

我不能做的事情


当前的代码,那是行不通的...

...
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 更改它。如果我能拥有它aPackageBasebPackageBase它将挽救我的生命。哈哈哈。


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

标签: javaswaggerspringfox

解决方案


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


推荐阅读