国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Doc OpenAPI3.0 拋棄SpringFox擁抱SpringDoc

這篇具有很好參考價值的文章主要介紹了Spring Doc OpenAPI3.0 拋棄SpringFox擁抱SpringDoc。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Spring Doc

1 簡介

SpringDoc是SpringBoot 的API文檔工具。官網:https://springdoc.org/

在使用SpringBoot 2.6以前去創(chuàng)建API文檔工具一般會采用SpringFox提供的Swagger庫,但是由于SpringBoot版本的不斷升級和SpringFox擺爛不更新,導致了SpringBoot2.6之后的項目無法使用SpringFox去生成API文檔,或者可以使用但是有很多的bug。

SpringDoc是一款可以結合SpringBoot使用API文檔生成工具,基于OpenAPI 3,而且項目維護和社區(qū)都在不斷更新,不僅支持SpringMVC,而且還支持Spring WebFlux項目。

下圖為SpringDoc的架構圖的總體概述。
springdoc-openapi-ui,spring boot,java,后端,spring,java,spring boot

2 基本使用

2.1 新建項目并導入maven

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

2.2 使用注解標記接口

2.2.1 常用注解
注解 描述
@Tag 標記在接口類上,用來設置 Controller 的名稱和描述
@Parameter/@Parameters 用來設置請求參數的描述
@Operation 對接口方法的描述,可以設置接口的名稱
@ApiResponse/@ApiResponses 用來配置響應
@Schema 標記在模型(model)類上或類的屬性上,進行標注解釋。
2.2.2 測試Controler Demo

TestController

package org.example.controller.test;
/**
 * 省略import
 */
@Tag(name = "測試接口", description = "定義測試接口")
@RestController
@RequestMapping("/test")
public class TestController {
    @Operation(summary = "get測試接口", description = "返回id")
    @Parameter(name = "id", description = "參數ID", example = "123456")
    @ApiResponse(responseCode = "403", description = "無權限")
    @GetMapping("/get")
    public Map<String, Object> get(@Parameter(description = "id") String id) {
        Map<String, Object> res = new HashMap<>(1);
        res.put("id", id);
        return res;
    }
}

UserController

package org.example.controller.user;
/**
 * 省略import
 */
@Tag(name = "用戶接口", description = "定義用戶接口")
@RestController
@RequestMapping("/user")
public class UserController {
    @Operation(summary = "post測試接口", description = "返回username")
    @Parameter(name = "username", description = "參數username", example = "username")
    @ApiResponse(responseCode = "403", description = "無權限")
    @PostMapping("/post")
    public Map<String, Object> get(@Parameter(description = "用戶名") String username) {
        Map<String, Object> res = new HashMap<>(1);
        res.put("username", username);
        return res;
    }
}

2.3 編寫SpringDocConfig

2.3.1 常用springdoc的配置
package org.example.config;

import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.ExternalDocumentation;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springdoc.core.GroupedOpenApi;
import org.springdoc.core.customizers.OpenApiCustomiser;
import org.springdoc.core.customizers.OperationCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author zhong
 */
@Configuration
public class SpringDocConfig {

    @Bean
    public OpenAPI defaultOpenAPI() {
//        return new OpenAPI()
//                .info(info())
//                .externalDocs(documentation())
//                .components(new Components().addSecuritySchemes("Authorization", new SecurityScheme().name("認證").type(SecurityScheme.Type.HTTP)
//                        .description("JWT認證").scheme("bearer").bearerFormat("JWT")));


        return new OpenAPI().
                info(info())
                .externalDocs(documentation());
    }

    public Info info() {
        return new Info()
                .title("SpringDoc OpenApi")
                .version("V1.0.0")
                .description("測試spring doc open api")
                .license(new License().name("許可證名稱").url("許可證地址"))
                .contact(new Contact().name("聯系人").url("聯想人鏈接"))
                .summary("概要");
    }

    public ExternalDocumentation documentation() {
        return new ExternalDocumentation().description("文檔描述").url("文檔地址");
    }

    @Bean
    public GroupedOpenApi testApi() {
        return GroupedOpenApi.builder()
                .displayName("測試接口")
                .group("test")
                .packagesToScan("org.example.controller.test")
                .build();
    }

    @Bean
    public GroupedOpenApi userApi() {
        return GroupedOpenApi.builder()
                .displayName("用戶接口")
                .group("user")
                .packagesToScan("org.example.controller.user")
                .addOpenApiCustomiser(openApiCustomiser())
                .addOperationCustomizer(operationCustomizer())
                .build();
    }

    public OpenApiCustomiser openApiCustomiser() {
        return api ->
                api.components(new Components()
                        .addSecuritySchemes("Authorization", new SecurityScheme().name("認證").type(SecurityScheme.Type.HTTP)
                                .description("JWT認證").scheme("bearer").bearerFormat("JWT"))
                );
    }

    public OperationCustomizer operationCustomizer() {
        return (operation, handlerMethod) -> {
            operation.addSecurityItem(new SecurityRequirement().addList("Authorization"));
            return operation;
        };
    }
}
2.3.2 關于接口鑒權問題(jwt方式)

如以上配置所示,user接口設置了鑒權設置

對一個分組的接口添加鑒權的方式

@Bean
    public GroupedOpenApi userApi() {
        return GroupedOpenApi.builder()
                .displayName("用戶接口")
                .group("user")
                .packagesToScan("org.example.controller.user")
                .addOpenApiCustomiser(openApiCustomiser())
                .addOperationCustomizer(operationCustomizer())
                .build();
}
public OpenApiCustomiser openApiCustomiser() {
    return api ->
            api.components(new Components()
                    .addSecuritySchemes("Authorization", new SecurityScheme().name("認證").type(SecurityScheme.Type.HTTP)
                            .description("JWT認證").scheme("bearer").bearerFormat("JWT"))
            );
}

public OperationCustomizer operationCustomizer() {
    return (operation, handlerMethod) -> {
        operation.addSecurityItem(new SecurityRequirement().addList("Authorization"));
        return operation;
    };
}

如果嫌麻煩,可以設置全局設置

例如配置代碼注釋的部分添加全局配置

 @Bean
    public OpenAPI defaultOpenAPI() {
        return new OpenAPI()
                .info(info())
                .externalDocs(documentation())
                .components(new Components().addSecuritySchemes("Authorization", new SecurityScheme().name("認證").type(SecurityScheme.Type.HTTP)
                        .description("JWT認證").scheme("bearer").bearerFormat("JWT")));

    }

2.4 啟動效果

訪問http://localhost:8080/swagger-ui/index.html

springdoc-openapi-ui,spring boot,java,后端,spring,java,spring boot

2.5 一些application的配置說明

2.5.1 springdoc-openapi 核心屬性

官方鏈接:https://springdoc.org/#springdoc-openapi-core-properties

參數名稱 默認值 描述
springdoc.api-docs.path /v3/api-docs String, 用于 Json 格式的 OpenAPI 文檔的自定義路徑。
springdoc.api-docs.enabled true Boolean. 禁用 springdoc-openapi 端點(默認為 /v3/api-docs)。
springdoc.packages-to-scan * List of Strings.要掃描的包列表(逗號分隔)
springdoc.paths-to-match /* List of Strings.要匹配的路徑列表(逗號分隔)
springdoc.produces-to-match /* List of Strings.The list of produces mediaTypes to match (逗號分隔)
springdoc.headers-to-match /* List of Strings.要匹配的標題列表(逗號分隔)
springdoc.consumes-to-match /* List of Strings.要匹配的消耗媒體類型列表(逗號分隔)
springdoc.paths-to-exclude List of Strings.要排除的路徑列表(逗號分隔)
springdoc.packages-to-exclude List of Strings.要排除的包列表(逗號分隔)
springdoc.default-consumes-media-type application/json String. 默認使用媒體類型。
springdoc.default-produces-media-type **/** String.默認產生媒體類型。
springdoc.cache.disabled false Boolean. 禁用計算 OpenAPI 的 springdoc-openapi 緩存。
springdoc.show-actuator false Boolean. 顯示執(zhí)行器端點。
springdoc.auto-tag-class true Boolean. 禁用 springdoc-openapi 自動標簽。
springdoc.model-and-view-allowed false Boolean. 允許帶有 ModelAndView 返回的 RestControllers 出現在 OpenAPI 描述中。
springdoc.override-with-generic-response true Boolean. 當為 true 時,自動將 @ControllerAdvice 響應添加到所有生成的響應中。
springdoc.api-docs.groups.enabled true Boolean. 禁用 springdoc-openapi 組。
springdoc.group-configs[0].group String.群名
springdoc.group-configs[0].display-name String.組的顯示名稱。
springdoc.group-configs[0].packages-to-scan * List of Strings.要掃描組的包列表(逗號分隔)
springdoc.group-configs[0].paths-to-match /* List of Strings.組匹配的路徑列表(逗號分隔)
springdoc.group-configs[0].paths-to-exclude `` List of Strings.要為組排除的路徑列表(逗號分隔)
springdoc.group-configs[0].packages-to-exclude List of Strings.要排除的包列表(逗號分隔)
springdoc.group-configs[0].produces-to-match /* List of Strings.The list of produces mediaTypes to match (逗號分隔)
springdoc.group-configs[0].consumes-to-match /* List of Strings.要匹配的消耗媒體類型列表(逗號分隔)
springdoc.group-configs[0].headers-to-match /* List of Strings.要匹配的標題列表(逗號分隔)
springdoc.webjars.prefix /webjars String, 把swagger-ui的URL可見的webjars前綴換成spring-webflux。
springdoc.api-docs.resolve-schema-properties false Boolean. 在@Schema 上啟用屬性解析器(名稱、標題和描述)。
springdoc.remove-broken-reference-definitions true Boolean. 禁用刪除損壞的引用定義。
springdoc.writer-with-default-pretty-printer false Boolean. 啟用 OpenApi 規(guī)范的漂亮打印。
springdoc.model-converters.deprecating-converter.enabled true Boolean. 禁用棄用模型轉換器。
springdoc.model-converters.polymorphic-converter.enabled true Boolean. 禁用多態(tài)模型轉換器。
springdoc.model-converters.pageable-converter.enabled true Boolean. 禁用可分頁模型轉換器。
springdoc.model-converters.sort-converter.enabled true Boolean. 禁用排序轉換器。
springdoc.use-fqn false Boolean. 啟用完全限定名稱。
springdoc.show-endpoint false Boolean. 使 spring security 登錄端點可見。
springdoc.pre-loading-enabled false Boolean. 預加載設置以在應用程序啟動時加載 OpenAPI。
springdoc.writer-with-order-by-keys false Boolean. 啟用確定性/字母順序。
springdoc.use-management-port false Boolean. 在執(zhí)行器管理端口上公開 swagger-ui。
springdoc.disable-i18n false Boolean. 使用 i18n 禁用自動翻譯。
springdoc.show-spring-cloud-functions true Boolean. 顯示 spring-cloud-function Web 端點。
springdoc.api-docs.version openapi_3_0 String. 選擇OpenAPI 3.0OpenAPI 3.1(使用值OPENAPI_3_1)。
springdoc.default-flat-param-object false Boolean. 默認展平參數。
springdoc.default-support-form-data false Boolean. 指定api接受表單數據時默認設置參數為表單數據。
springdoc.nullable-request-parameter-enabled true Boolean. 在 Kotlin 中默認啟用對可空請求參數的支持。
springdoc.show-oauth2-endpoints false Boolean. 使 spring security oauth2-endpoint 可見。
2.5.2 swagger-ui核心屬性

官方鏈接https://springdoc.org/#swagger-ui-properties

參數名稱 默認值 描述
springdoc.swagger-ui.path /swagger-ui.html String, 用于 swagger-ui HTML 文檔的自定義路徑。
springdoc.swagger-ui.enabled true Boolean. 禁用 swagger-ui 端點(默認為 /swagger-ui.html)。
springdoc.swagger-ui.configUrl /v3/api-docs/swagger-config String. 從中獲取外部配置文檔的 URL。

2 從SpringFox遷移

  • 刪除 springfox 和 swagger 2 依賴項。添加springdoc-openapi-ui依賴項。
   <dependency>
      <groupId>org.springdoc</groupId>
      <artifactId>springdoc-openapi-ui</artifactId>
      <version>1.7.0</version>
   </dependency>
  • 用 swagger 3 注釋替換 swagger 2 注釋(它已經包含在springdoc-openapi-ui依賴項中)。swagger 3 注釋的包是io.swagger.v3.oas.annotations.
    • @Api@Tag
    • @ApiIgnore@Parameter(hidden = true)@Operation(hidden = true)@Hidden
    • @ApiImplicitParam@Parameter
    • @ApiImplicitParams@Parameters
    • @ApiModel@Schema
    • @ApiModelProperty(hidden = true)@Schema(accessMode = READ_ONLY)
    • @ApiModelProperty@Schema
    • @ApiOperation(value = "foo", notes = "bar")@Operation(summary = "foo", description = "bar")
    • @ApiParam@Parameter
    • @ApiResponse(code = 404, message = "foo")@ApiResponse(responseCode = "404", description = "foo")
  • 如果您使用一個對象來捕獲多個請求查詢參數,請注釋該方法參數@ParameterObject
  • 此步驟是可選的:僅當您有多個 Docketbeans 時才用GroupedOpenApibeans 替換它們。

前:

  @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.*"))
              .apis(RequestHandlerSelectors.withMethodAnnotation(Admin.class))
              .build()
              .groupName("springshop-admin")
              .apiInfo(apiInfo());
  }

現在:

  @Bean
  public GroupedOpenApi publicApi() {
      return GroupedOpenApi.builder()
              .group("springshop-public")
              .pathsToMatch("/public/**")
              .build();
  }
  @Bean
  public GroupedOpenApi adminApi() {
      return GroupedOpenApi.builder()
              .group("springshop-admin")
              .pathsToMatch("/admin/**")
              .addOpenApiMethodFilter(method -> method.isAnnotationPresent(Admin.class))
              .build();
  }

如果你只有一個 Docket?- 刪除它并添加屬性到你的application.properties

springdoc.packagesToScan=package1, package2
springdoc.pathsToMatch=/v1, /api/balance/**
  • 添加OpenAPI類型的bean。參見示例:
  @Bean
  public OpenAPI springShopOpenAPI() {
      return new OpenAPI()
              .info(new Info().title("SpringShop API")
              .description("Spring shop sample application")
              .version("v0.0.1")
              .license(new License().name("Apache 2.0").url("http://springdoc.org")))
              .externalDocs(new ExternalDocumentation()
              .description("SpringShop Wiki Documentation")
              .url("https://springshop.wiki.github.org/docs"));
  }

3 使用 knife4j美化

springdoc-openapi-ui,spring boot,java,后端,spring,java,spring boot

3.1 使用方法

Knife4j是一個集Swagger2 和 OpenAPI3為一體的增強解決方案。

官網:https://doc.xiaominfo.com/

首先,引用Knife4j的starter,Maven坐標如下:

<dependency>
	<groupId>com.github.xiaoymin</groupId>
	<artifactId>knife4j-openapi3-spring-boot-starter</artifactId>
	<version>4.1.0</version>
</dependency>

然后刪除之前的springdoc-openapi-ui

springdoc-openapi-ui,spring boot,java,后端,spring,java,spring boot

3.2 常用配置項

官方說明地址:https://doc.xiaominfo.com/docs/features/enhance文章來源地址http://www.zghlxwxcb.cn/news/detail-763176.html

## knife4j的增強配置,不需要增強可以不配
knife4j:
  enable: true
  setting:
    language: zh_cn
    enable-home-custom: true
    home-custom-path: classpath:markdown/api-home.md
    enable-footer-custom: true
    footer-custom-content: 系統(tǒng)文檔

到了這里,關于Spring Doc OpenAPI3.0 拋棄SpringFox擁抱SpringDoc的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【springboot】Spring 官方拋棄了 Java 8!新idea如何創(chuàng)建java8項目

    【springboot】Spring 官方拋棄了 Java 8!新idea如何創(chuàng)建java8項目

    我本來以為是 IDEA 版本更新導致的 Bug,開始還沒在意。 直到我今天自己初始化項目時才發(fā)現:臥槽,Java 8 真沒了?! 具體一點,應該是使用 IDEA 內置的 Spring Initializr 創(chuàng)建 Spring Boot 新項目時,沒有 Java 8 的選項了,只剩下了 = 17 的版本 去網上搜了一圈,原來這是因為 Sprin

    2024年02月04日
    瀏覽(18)
  • Spring Boot 3.x 引入springdoc-openapi (內置Swagger UI、webmvc-api)

    Spring Boot 3.x 引入springdoc-openapi (內置Swagger UI、webmvc-api)

    接觸的原因 因開發(fā)自己的項目時,寫接口文檔很繁瑣,查到后端都在用 swagger 等接口工具來記錄接口文檔,于是學習了一下,本文記錄個人配置過程,有問題歡迎指正交流?? Swagger: Swagger是一種Rest API的表示方式,它是標準的、語言無關的工具,這種表示方式不僅人可讀,

    2024年04月27日
    瀏覽(23)
  • @Tag和@Operation標簽失效問題。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成

    @Tag和@Operation標簽失效問題。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成

    問題 @Tag和@Operation標簽失效 但是@Schema標簽有效 pom依賴 debug排查,發(fā)現時國際化問題 解決方法:application.yml配置禁用i18n翻譯

    2024年02月05日
    瀏覽(23)
  • Spring Security Oauth2.1 最新版 1.1.0 整合 gateway 完成授權認證(擁抱 springboot 3.1)

    Spring Security Oauth2.1 最新版 1.1.0 整合 gateway 完成授權認證(擁抱 springboot 3.1)

    目錄 背景 demo地址 版本 Spring Boot 3.1 Spring Authorization Server 1.1.0 基礎 spring security OAuth2 模塊構成 授權方式 認證方式 集成過程 官方demo 代碼集成 依賴 授權服務AuthorizationServerConfig配置 重要組件 測試 查看授權服務配置 訪問授權服務 授權 回調 獲取?access_token 獲取用戶信息 個性

    2024年02月08日
    瀏覽(19)
  • Spring Boot 集成 API 文檔 - Swagger、Knife4J、Smart-Doc

    Spring Boot 集成 API 文檔 - Swagger、Knife4J、Smart-Doc

    Swagger 作為 API 設計和文檔的強大工具,是一個由專門的工具集合支持的框架,它在整個 API 的生命周期中發(fā)揮作用,從設計和文檔,到測試和部署。通過提供可視化界面,Swagger 讓開發(fā)人員和最終用戶都能清晰地理解和操作 API。 使用建議:筆者建議優(yōu)先考慮 Knife4J,它已經能

    2024年01月22日
    瀏覽(22)
  • 解決引入spire.doc.free-3.9.0.jar導致spring boot項目無法使用maven的install問題

    解決引入spire.doc.free-3.9.0.jar導致spring boot項目無法使用maven的install問題

    問題背景: 在一個項目中需求中需要導出一個word模板,那之前有做過一個這個類似需求,這次使用的是freemarker模版。在引入spire.doc.free-3.9.0.jar依賴的時候發(fā)現maven依賴報紅色,懸浮提示aliyun找不到改包,沒有太在意這個部分,本地能夠正常使用。本地倉庫存在這個jar包,并

    2024年02月15日
    瀏覽(38)
  • SpringBoot_springfox-swagger版本升級處理

    使用springfox-swagger2 + swagger-bootstrap-ui 升級實現2.7.0-2.10.5,發(fā)現高版本的配置方式與低版本配置存在差異,因此記錄處理過程 maven依賴 Java Config maven依賴 Java Config 使用springfox-swagger2 + swagger-bootstrap-ui 升級實現2.7.0-2.10.5 需要改造 升級依賴版本 并補充springfox-spring-webmvc模塊 注解啟動

    2023年04月11日
    瀏覽(17)
  • springboot配置swagger3-springfox實現

    springfox 之前配置需要聲明多個依賴,到了 3 直接聲明一個 starter 就行了. springboot 版本 2.7.7 springfox-boot-starter 版本 3.0.0 聲明依賴 聲明yml配置 bean配置

    2024年02月12日
    瀏覽(20)
  • Springboot3.0整合swagger,廢棄Springfox改用Springdoc

    Springboot3.0整合swagger,廢棄Springfox改用Springdoc

    Automated JSON API documentation for API\\\'s built with Spring 官網地址:springfox.io springdoc-openapi java library helps to automate the generation of API documentation using spring boot projects. 官網地址:https://springdoc.org/v2/ 注意 :使用的是V2版本,這個版本支持springboot3.0 之前springboot3.0之前我用的都是Springfox來集

    2023年04月09日
    瀏覽(24)
  • 拋棄Vuex,使用Pinia

    拋棄Vuex,使用Pinia

    1.簡介 官網 Pinia 起始于 2019 年 11 月左右的一次實驗,其目的是設計一個擁有組合式 API 的 Vue 狀態(tài)管理庫。從那時起,我們就傾向于同時支持 Vue 2 和 Vue 3,并且不強制要求開發(fā)者使用組合式 API,我們的初心至今沒有改變。除了 安裝 和 SSR 兩章之外,其余章節(jié)中提到的 API 均

    2024年02月06日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包