Swagger3 註解使用(Open API 3)

swagger 3 的使用

Swagger2(基於openApi3)已經在17年停止維護了,取而代之的是 sagger3(基於openApi3),而國內幾乎沒有 sagger3使用的文檔,百度搜出來的都是swagger2的使用,這篇文章將介紹如何在 java 中使用 openApi3(swagger3)。

相關介紹

Open API

OpenApi是業界真正的 api 文檔標準,其是由 Swagger 來維護的,並被linux列爲api標準,從而成爲行業標準。

Swagger

swagger 是一個 api 文檔維護組織,後來成爲了 Open API 標準的主要定義者,現在最新的版本爲17年發佈的 Swagger3(Open Api3)。
國內絕大部分人還在用過時的swagger2(17年停止維護並更名爲swagger3)
swagger2的包名爲 io.swagger,而swagger3的包名爲 io.swagger.core.v3

SpringFox

SpringFox是 spring 社區維護的一個項目(非官方),幫助使用者將 swagger2 集成到 Spring 中。
常常用於 Spring 中幫助開發者生成文檔,並可以輕鬆的在spring boot中使用。
截至2020年4月,都未支持 OpenAPI3 標準。

SpringDoc

SpringDoc也是 spring 社區維護的一個項目(非官方),幫助使用者將 swagger3 集成到 Spring 中。
也是用來在 Spring 中幫助開發者生成文檔,並可以輕鬆的在spring boot中使用。

該組織下的項目支持swagger頁面Oauth2登錄(Open API3的內容),相較 SpringFox來說,它的支撐時間更長,無疑是更好的選擇。但由於國內發展較慢,在國內不容易看到太多有用的文檔,不過可以訪問它的官網。它的使用了 swagger3(OpenAPI3),但 swagger3 並未對 swagger2 的註解做兼容,不易遷移,也因此,名氣並不如 spring fox。


從 springfox 遷移

依賴變更

pom.xml 裏去掉 springfox 或者 swagger 的依賴。添加springdoc-openapi-ui

   <dependency>
      <groupId>org.springdoc</groupId>
      <artifactId>springdoc-openapi-ui</artifactId>
      <version>1.3.1</version>
   </dependency>

使用 swagger3 註解代替 swagger2 的

用 swagger 3 的註解(已經在上面引入)代替 swagger 2 的
(注意修改 swagger 3 註解的包路徑爲io.swagger.v3.oas.annotations.)

對應關係爲:

@ApiParam -> @Parameter
@ApiOperation -> @Operation
@Api -> @Tag
@ApiImplicitParams -> @Parameters
@ApiImplicitParam -> @Parameter
@ApiIgnore -> @Parameter(hidden = true) or @Operation(hidden = true) or @Hidden
@ApiModel -> @Schema
@ApiModelProperty -> @Schema

修改Api 分組(當且僅當你之前定義了多個 Docket Bean)

舊:

   @Bean
    public Docket publicApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("org.github.springshop.web.public"))
                .paths(PathSelectors.regex("/public.*"))
                .build()
                .groupName("springshop-public")
                .apiInfo(apiInfo());
    }
  
    @Bean
    public Docket adminApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("org.github.springshop.web.admin"))
                .paths(PathSelectors.regex("/admin.*"))
                .build()
                .groupName("springshop-admin")
                .apiInfo(apiInfo());
    }

新:

   @Bean
    public GroupedOpenApi publicApi() {
        return GroupedOpenApi.builder()
                .setGroup("springshop-public")
                .pathsToMatch("/public/**")
                .build();
    }
  
    @Bean
    public GroupedOpenApi adminApi() {
        return GroupedOpenApi.builder()
                .setGroup("springshop-admin")
                .pathsToMatch("/admin/**")
                .build();
    }

如果之前只有一個 Docket,則把他刪了,用配置文件替代它

springdoc.packagesToScan=package1, package2
springdoc.pathsToMatch=/v1, /api/balance/**

其他情況

swagger ui在代理的後面,如 nginx

參見這篇
https://springdoc.org/faq.html#how-can-i-deploy-the-doploy-springdoc-openapi-ui-behind-a-reverse-proxy.

自定義 Swagger UI

https://springdoc.org/faq.html#how-can-i-configure-swagger-ui.

在文檔中隱藏某個接口或者 Controller

https://springdoc.org/faq.html#how-can-i-hide-an-operation-or-a-controller-from-documentation-.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章