【问题标题】:How to show endpoints from parent project in SwaggerUI如何在 SwaggerUI 中显示来自父项目的端点
【发布时间】:2019-11-07 11:28:11
【问题描述】:

我有两个项目,一个是类似机箱的项目,有一些依赖项,spring-boot-starter-parent 作为父级,一个带有 REST 端点的模块,第二个是第一个项目作为父级的项目,它具有运行 Spring 的 main 方法启动应用程序。 我正在使用 Swagger 记录此端点,但它没有显示来自父项目的自定义端点。我只能看到一个端点是BasicErrorController/error,它也来自父 Spring Boot 项目,我想以同样的方式显示我的端点。

我尝试将 ExampleChassis 注释为 @Controller(与 BasicErrorController 相同),但效果不佳(代码如下)。主类有注解@EnableSwagger2

父项目pom.xml:

<groupId>com.example</groupId>
<artifactId>chassis</artifactId>
<version>1.1-SNAPSHOT</version>
<packaging>pom</packaging>

<properties>
    <swagger2.version>2.9.2</swagger2.version>
</properties>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.5.RELEASE</version>
</parent>

<modules>
    <module>rest</module>
</modules>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

休息模块pom.xml:

<parent>
    <artifactId>chassis</artifactId>
    <groupId>com.example</groupId>
    <version>1.1-SNAPSHOT</version>
</parent>

<artifactId>rest</artifactId>
<dependencies>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>${swagger2.version}</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>${swagger2.version}</version>
    </dependency>
</dependencies>

可运行的SpringBoot项目pom.xml:

<artifactId>micro</artifactId>
<version>1.0-SNAPSHOT</version>

<parent>
    <groupId>com.example</groupId>
    <artifactId>chassis</artifactId>
    <version>1.1-SNAPSHOT</version>
</parent>

<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>rest</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

REST 端点:

@RestController
@RequestMapping("/example")
public class ExampleChassis {

    @RequestMapping
    public String getXing() {
        return "example";
    }
}

我希望在 SwaggerUI 和 .json 中看到 /example 端点,但我只能看到 /error 端点。

【问题讨论】:

    标签: java spring spring-boot swagger springfox


    【解决方案1】:

    编写你自己的 swagger 配置并在下面定义一个 bean,无论你提供什么基础包,swagger 都会按照相同的方式过滤 API。

    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
        @Bean
        public Docket productApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .select().apis(RequestHandlerSelectors.basePackage("com.company"))
                    .paths(PathSelectors.any())
                    .build();
        }
    }
    

    【讨论】:

    • 不幸的是,它只排除了 /error 路径,但仍然没有显示我父项目的 /example 端点。我还在rest模块中创建了这个bean,并将它导入到主类(@Import(SwaggerConfig.class),但它没有改变任何东西。
    • 另外,配置bean也不是必须的,因为它需要所有@RestController和@Controller类。这就是 SwaggerUI 从 BasicErrorController 显示 /error 端点的原因
    猜你喜欢
    • 2020-01-29
    • 2023-02-17
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 2021-10-10
    • 2021-03-12
    • 2021-10-24
    • 2023-04-09
    相关资源
    最近更新 更多