Swagger 1.5不显示我的1.2的@Api描述?
我最近将一个项目从Swagger API 1.2升级到2.0(或者用Swagger核心术语,从1.3升级到1.5)。 由于他们出色的移民指南 ,我设法在很短的时间内完成了这项工作,几乎没有任何障碍。 唯一困扰我的是缺乏对@Api
注释的description
值的支持。 端点被精心记录 – 包括顶级API端点 – 但它们的描述不再在UI中显示:
请注意,缺少某些东西?
一些研究(意思是,阅读源代码)产生了相同的description
现在已经过时,为更@Tag
注释@Tag
。 但是我找不到有关如何应用它们的信息,因此描述仍然存在于每个端点类中。
使用Dropwizard,有没有办法以编程方式在Swagger 1.5中实现这一点?
我设法通过理解几个概念最终解决了这个问题:
-
API端点(通常具有
@Api
注释) 按标记分组,而不是按资源分组 。 例如,这可以使操作列在多个类别下。 标签可以(但不一定)从@Api
注释的value
属性派生 – 通常以斜杠开头。 这使得分组和UI在迁移时的行为几乎相同,但也让我感到困惑,因为没有意识到description
属性被忽略了 – 必须要阅读它,对吧? -
标签是Swagger规范中的一等公民( 见这里 )。 它们是可扩展的,可以有描述,如本评论中所述 。
-
可以通过以编程方式将
@Tag
注释应用于Swagger可发现的任何资源来添加标记或增强现有标记。 只需选择一个资源并在那里列出所需的描述 – 但一定要只在一个地方。 幸运的是,我碰巧有一个抽象类,所有的资源都延伸了。 因此,根据具体情况,我可以在最自然的地方写下描述:import io.swagger.annotations.Contact; import io.swagger.annotations.Info; import io.swagger.annotations.SwaggerDefinition; import io.swagger.annotations.Tag;
接着
@SwaggerDefinition( info = @Info( title = "My API", version = "0.1", contact = @Contact(name = "Me", email = "me@myself.com") ), tags = { @Tag( name = "pets", description = "Manage pets" ), @Tag( name = "search", description= "Search pets" ), ... } ) public class BaseResource { ... }
瞧! 在编译和启动UI之后,可以展示旧的描述,就像上面提到的评论一样 。 成就解锁。
为了真正实现交易密封,现在可以从资源中删除@Api
的description
属性,因为描述是从@Tag
规范中推断出来的。