Swagger-UI在根端点上不显示SpringBoot和path参数

时间:2018-08-01 14:31:36

标签: spring-boot swagger

我正在尝试为现有的Spring Boot API项目设置摇摇欲坠的功能。我发现我有两个端点导致http://url/swagger-ui.html文件无法渲染。如果我注释掉这两个端点,则它可以正确渲染。

当两个端点存在时,http://url/v2/api-docs json文件确实成功呈现。我可以从api-docs中获取json并将其粘贴到https://editor.swagger.io/中,并且html页面可以在该站点上正确呈现。

引起问题的两个端点位于根路径上,并且在url中仅具有path参数。它们每个都在具有@RequestMapping(“ /”)的控制器中,并带有注释;

@PutMapping(value = "{vaultTitleId}", produces = MediaType.APPLICATION_JSON_VALUE)

@DeleteMapping(value = "{vaultTitleId}")

这两个端点正常工作,它们只是导致Swagger呈现HTML出现了一些问题。如果删除它们,将显示HTML。我尝试将它们自己移动到控制器中,看看是否可以防止Swagger在Swagger配置中访问它们。但是,看来它们仅存在于spring boot看到它们的地方,以防止html显示。

任何建议都值得赞赏。我想使用Swagger,但是现在我放弃了,而是在寻找其他工具。

Gradle

compile("io.springfox:springfox-swagger2:2.9.2")
compile("io.springfox:springfox-swagger-ui:2.9.2")

Swagger配置

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

1 个答案:

答案 0 :(得分:1)

我发现了一个解决方法。这是在另一个论坛中提出的。

https://github.com/springfox/springfox/issues/631
  

问题在于您是端点正在使用端点映射,   您可以创建一个可解决该问题的正则表达式吗?

     

@DeleteMapping(value =“ {vaultTitleId:^((?! swagger-ui.html)。)* $}”))   似乎有点笨拙,但不确定正确的答案是什么。

使用带有正则表达式的请求映射来定义path参数,确实可以显示swagger-ui。对我来说,这为什么起作用并不明显。我称其为解决实际问题而不是实际解决方案。但是,这就是我要使用的。

    @DeleteMapping(value = "{vaultTitleId:^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$}", produces = MediaType.APPLICATION_JSON_VALUE)