我正在尝试为现有的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();
}
}
答案 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)