我正在尝试为现有的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,但是现在我放弃了,而是在寻找其他工具。

摇篮

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

最佳答案

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

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)

09-15 23:22