Swagger not detecting Spring Data Rest APIs with Spring Boot



我设置了一个Spring Boot项目,包括Spring Data Rest和Swagger:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.4.0</version>
</dependency>
<dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.4.0</version>
</dependency>

这是我的 Swagger 配置:

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

摘自 application.properties:

spring.data.rest.base-path=/api
server.context-path=/myapp

当我运行服务器时,所有 rest 端点都正确映射并可访问/myapp/api/...,包括我自己创建的自定义 RestController。

然而:

  • http://localhost:8080/myapp/api我可以看到春天的列表数据 Rest API(Json 格式),但看不到我的自定义 RestController 终结点。

  • http://localhost:8080/myapp/swagger-ui.html,我看到一个不错的 GUI,它只列出了我的自定义 RestController 和错误端点,而不是 Spring Data Rest API。事实上,http://localhost:8080/myapp/v2/api-docs 没有引用 Spring Data Rest 端点,而只引用我的自定义 RestController 和错误端点。

如何修复我的 Spring Data Rest & Swagger 配置?

升级到最新版本的 swagger

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.7.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-data-rest</artifactId>
        <version>2.7.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.7.0</version>
    </dependency>

另外,在 spring 配置/应用程序类上导入 spring 数据休息注释。

@Import(SpringDataRestConfiguration.class)

Spring Data Rest支持仅在springfox版本2.6.0中引入。如果您在升级到最新版本的 springfox(撰写本文时为 2.6.1)后按照说明进行操作,则在渲染端点时应该不会有问题。

您是否从 springfox-data-rest 导入了配置?正如 Dilip Krishnan 所说,我按照说明导入了配置,并将以下注释添加到我的主应用程序类中:

@Import({springfox.documentation.spring.data.rest.configuration.SpringDataRestConfiguration.class})

希望对您有所帮助!

对于 Spring boot 2,您需要使用 springfox 3.0 .不幸的是,在撰写本文时,此版本尚未发布,但您可以使用快照版本。

<repositories>
    <repository>
      <id>jcenter-snapshots</id>
      <name>jcenter</name>
      <url>http://oss.jfrog.org/artifactory/oss-snapshot-local/</url>
    </repository>
</repositories>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>3.0.0-SNAPSHOT</version>
</dependency>

您还需要将@EnableSwagger2替换为 @EnableSwagger2WebMvc .

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.data.rest.configuration.SpringDataRestConfiguration;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
@Configuration
@EnableSwagger2WebMvc
@Import(SpringDataRestConfiguration.class)
public class SwaggerConfig {
  @Bean
  public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
        .select()
        .apis(RequestHandlerSelectors.any())
        .paths(PathSelectors.any())
        .build();
  }
}

最新更新