Swagger无法检测到使用Spring Boot的Spring Data Rest APIs

17

我设置了一个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上,我可以看到Spring数据rest API列表(以Json格式),但无法看到我的自定义RestController端点。

  • http://localhost:8080/myapp/swagger-ui.html上,我看到一个漂亮的界面,只列出了我的自定义RestController和错误端点,而没有Spring Data Rest APIs。

    事实上,http://localhost:8080/myapp/v2/api-docs没有提及任何Spring Data Rest端点,而只提及我的自定义RestController和错误端点。

我该如何修复我的Spring Data Rest & Swagger配置?
4个回答

8

升级到最新版本的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 Data Rest注释。
@Import(SpringDataRestConfiguration.class)

1
@Import(SpringDataRestConfiguration.class) 对我很有帮助。我把它放在了 Application 类中。谢谢! - AlikElzin-kilaka

6

Spring Data Rest支持仅在springfox 2.6.0版本中引入。如果你按照说明升级到最新版本的springfox(本文撰写时为2.6.1),那么渲染端点时就不会出现问题。


1
谢谢。我已将版本升级到2.6.1并添加了Maven依赖项,按照说明进行操作,但我仍然处于同样的情况。 - Manu
.build() 后添加 .pathMapping("/myapp") - sofend

3

您是否从springfox-data-rest导入了配置?就像Dilip Krishnan所说,我按照说明进行了操作并导入了配置,在我的主应用程序类中添加了此注释:

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

希望这能有所帮助!

嘿,它应该放在哪里?哪个文件? - Luiz Mitidiero
@LuizMitidiero 例如,您可以将其添加到主应用程序类或SwaggerConfig类中。 - Gökçer Gökdal

2

对于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();
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接