【发布时间】:2020-10-23 21:49:32
【问题描述】:
我有一个 SpringBoot、JAX-RS 和 Maven 应用程序。我正在使用 Swagger 注释来提供有关 REST 服务接口的信息。它基本上可以工作,但是我遇到了一些我期望一组有限值的参数的问题。我相信我正确地指定了“@Api ...”注释,并且我可以在 swagger.json 文件中看到预期的结果,但是 swagger-ui 似乎没有对这些信息做任何事情。
我的 pom.xml 似乎指定了 1.5.20 版本的 swagger 工件。
以下是 Java 接口的一个被大量省略的摘录:
@GET
@Path("...")
@ApiOperation("...")
@ApiImplicitParams({
...
@ApiImplicitParam(name = "poi_types", value = "Types of locations to include",
allowableValues = "pos, wifi, country",
dataType = "string", paramType = "query"),
...
})
public Object ...(@QueryParam(...)
@ApiParam(name = ..., value = "...")
String ...) {
在 swagger.json 中,我看到该条目的以下内容:
{
"name" : "poi_types",
"in" : "query",
"description" : "Types of locations to include",
"required" : false,
"type" : "string",
"enum" : [ "pos", "wifi", "country" ]
}
在生成的 UI 中,我看到以下内容:
我在某处看到了一些关于所需架构与 swagger-ui 呈现的内容之间可能存在脱节的提及,例如可能需要在参数定义中包含“type”和“enum”属性的“schema”元素。我尝试手动更改 swagger.json 以包含它,但没有任何区别。
谁能在这里提供任何背景?
更新:
我升级到 swagger-core 和 swagger-annotations v1.6.2。我还尝试将“allowableValues”放入“@ApiParam”,而不仅仅是“@ApiImplicitParam”。这些变化都没有任何区别。我在 UI 中没有看到任何关于允许值的指示。
这是来自@ApiParam 更改的更改元素:
{
"name" : "isocc2",
"in" : "query",
"description" : "Country code",
"required" : false,
"type" : "string",
"enum" : [ "en", "es" ]
}
这就是它在 swagger UI 中的显示方式:
我还从浏览器验证了它加载的 swagger.json,它符合我的预期。
为了以防万一,我在 Chrome 和 Firefox 中进行了测试。
这里还有什么问题?
【问题讨论】:
-
建议您使用最新的 swagger 版本。
-
我在最新的 openapi 2.x 版本 1.6.2 上试了一下,没有任何区别。
-
我认为我们缺少一些罐子。新版本是否也需要更改注释??
-
也许你应该改写一下。
标签: spring-boot maven jax-rs swagger-ui openapi