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

问题描述

我的依赖......

<!-- 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。
  • 我想使用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()

...

想要什么...

我只想使用两个基本软件包。我并没有尝试在运行时更改它,当然我可以在运行时更改它,并且仅使用one packageBase,但是我为每个API都更改了它。如果我可以拥有aPackageBasebPackageBase,它将挽救我的生命。哈哈。


注意:我不认为我需要展示更多有关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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...