Swagger没有读取Path参数:@Path("文件夹{path:。*}")

时间:2016-05-12 16:16:42

标签: java jax-rs swagger resteasy swagger-ui

我在让Swagger为具有可选路径参数的API调用生成正确文档时遇到问题。

我正在建立一个与文件系统类似的层次结构的API。我想调用相同的方法来获取根结构,就像我获取子资源一样。例如: 获取root:/文件夹 获取子文件夹:/ folder / path / to

我的Jax-rs方法如下所示:

@GET @Path("folder{path:.*}")
Response folderContents(@ApiParam(value = "The folder to list", required = false) @PathParam("path") String path)
{...}

我的方法调用有效,但我的招摇文档不正确,无法正常工作。当我运行它时,Swagger-ui会生成看起来像这样的GET调用:

http://localhost:8080/storage-war/rest/filestore/folder {路径:*}

我正在寻找一种方法来强制Swagger生成正确的签名或重建我的正则表达式,以便我生成的Swagger是正确的。

之前我尝试使用 @Path("文件夹/ {路径:。}")*;他生成了正确的Swagger文档但是没有给出我的无路径给定案例。我还尝试了 @Path(" / folder {p:/?} {path:(。)}")*;这产生了一个工作方法调用但不正确的Swagger文档。

有没有直接的方式去做我正在寻找的事情?

修改

最后,我为root和文件夹创建了单独的方法调用。然后我用@ApiOperation(hidden = true)用它装饰了根调用。这样我在我的代码中有一个额外的方法,但在我的Swagger文档中只显示了一个方法。

@GET @Path("folder/{path:.*}")
Response folderContents(@PathParam("path") String path)
{...}

@GET @Path("folder")
@ApiOperation(hidden = true)
Response rootContents()
{...}

1 个答案:

答案 0 :(得分:1)

在招摇时,路径参数始终是必需的。理解在许多框架和实践中它们可以是可选的,但在需要它们的时候,它们是昂首阔步的。见https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#fixed-fields-7