我使用@BasePathAwareController
实现了一个控制器,该控制器还利用了Spring Data REST(用于发现排序/大小等内容)。以及一些自定义的端点(用于更新等)。该应用程序按预期工作,并且端点为SpringREST生成的数据按预期工作,我可以看到响应中出现了自我链接,但是我看不到Swagger UI中的这些端点。我可以看到我的自定义端点在我的控制器中定义。
根据此post,我需要将Swagger 3.0.0-SNAPSHOT
与@EnableSwagger2WebMvc
结合使用
这是我的配置:
我的app.yml
:
spring:
data:
rest:
basePath: /api/v1
我的POM
文件:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath/>
</parent>
<properties>
<springfox.swagger.version>3.0.0-SNAPSHOT</springfox.swagger.version>
</properties>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${springfox.swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${springfox.swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-data-rest</artifactId>
<version>${springfox.swagger.version}</version>
</dependency>
Swagger配置文件:
@Configuration
@Import(SpringDataRestConfiguration.class)
@EnableSwagger2WebMvc
public class SwaggerConfig {
@Bean
public Docket api(ServletContext servletContext) {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("my.package.name"))
.paths(PathSelectors.any())
.build().apiInfo(apiEndPointsInfo());
}
private ApiInfo apiEndPointsInfo() {
return new ApiInfoBuilder().title("My App REST API's")
.description("My App REST API's")
.version("1.0").build();
}
}
我的仓库:
@RepositoryRestResource(exported=true, collectionResourceRel="group", path="group")
public interface GroupRepository extends JpaRepository<Group, Long>, JpaSpecificationExecutor<Group> {
}
为什么我看不到Spring Data REST产生的默认端点?
我发现了问题所在。我不知道Spring Data REST不会在我在此处指定的控制器包名称下公开生成的端点:
.apis(RequestHandlerSelectors.basePackage("my.package.name"))
所以当我将以上行更改为:
.apis(RequestHandlerSelectors.any())
并且我可以看到JPA存储库端点。