最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot3整合SpringDoc實現(xiàn)在線接口文檔的詳細過程

 更新時間:2024年06月18日 09:14:52   作者:xiezhr  
這篇文章主要介紹了SpringBoot3整合SpringDoc實現(xiàn)在線接口文檔的詳細過程,本文通過示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧

寫在前面

在現(xiàn)目前項目開發(fā)中,一般都是前后端分離項目。前端小姐姐負責開發(fā)前端,苦逼的我們負責后端開發(fā)

事實是一個人全干,在這過程中編寫接口文檔就顯得尤為重要了。然而作為一個程序員,最怕的莫過于自己寫文檔和別人不寫文檔

大家都不想寫文檔,那這活就交給今天的主角Swagger來實現(xiàn)了

一、專業(yè)名詞介紹

OpenApi是什么?

解答:OpenApi是一個用于描述、定義和共享 RESTful API 文檔的規(guī)范。最新規(guī)范是 OpenAPI 3.0

Swagger是什么?

解答: Swagger 是一個用于設計和測試 RESTful APIs 的工具。

它提供了API 描述、請求和響應示例、API 測試和文檔生成等豐富的功能。最新版本是Swagger3,支持OpenAPI3.0規(guī)范

SpringFox 是什么?

SpringFox 是 Spring 社區(qū)維護的一個項目(非官方),幫助使用者將 Swagger 2 集成到 Spring 中。

目前國內項目使用的都是它

github地址:https://github.com/springfox/springfox

springDoc是什么?

解答: Spring-doc也是 Spring 社區(qū)維護的一個項目(非官方),幫助使用者將 Swagger 3 集成到 Spring 中

SpringDoc 支持 Swagger 頁面 Oauth2 登錄,相較于 SpringFox 而言,它的支撐時間更長,無疑是更好的選擇

但是在國內發(fā)展較慢,網(wǎng)上一找資料,出來的基本上是 Swagger2的內容。

地址:https://springdoc.org/

OpenAPI 、Spring-docSwagger 之間的關系

解答:OpenAPI 定義了一種標準的格式來表示 API 文檔,而 Swagger 是一個實現(xiàn) OpenAPI 規(guī)范的工具

二、Swagger詳細簡介

Swagger 江湖人稱“絲襪哥”,是一個幫助程序員生成接口文檔的利器。

只需要簡單配置,就可以生成帶有漂亮UI界面的接口文檔,而且編寫的接口代碼變了

接口文檔隨之也跟著變,做到了真正的解放雙手。

官網(wǎng)https://swagger.io/

Swagger 優(yōu)點

號稱世界上最流行的API框架

  • Restful Api 文檔在線自動生成器
  • 直接運行,支持在線測試API
  • 不僅僅支持Java,還支持多種語言(如:PHP、Python、Node.js等)

三、小試牛刀

說了這么多Swagger 的優(yōu)點,接下來就小試牛刀,看看怎么將Swagger集成到SpringBoot中。

3.1、環(huán)境介紹

  • JDK:17
  • SpringBoot:3.3.0
  • Springdoc

注: 細心的小伙伴可能已經(jīng)發(fā)現(xiàn)了,在springboot3.0之前我用的都是Springfox來集成Swagger管理我們的API接口文檔,

但是Springfox已經(jīng)停止更新了,我們使用的是SpringBoot3 +jdk17 的環(huán)境后,Spring官網(wǎng)推薦了Springdoc 來整合swagger

3.2 新建一個springboot-web項目

3.3 添加依賴

由于篇幅原因,其他web項目相關依賴這里就不一一貼出來了。

第一個依賴是必須的,而且版本必須大于2.0.0

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.2.0</version>
</dependency>
<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-api</artifactId>
    <version>2.2.0</version>
</dependency>

注:

我們這里使用的是jdk17+springboot3.3.0 環(huán)境,原來swaggerV2V3都不能用了,小伙伴們一定更要注意這兒

如果引入上面錯誤的依賴,項目啟動會報下面錯誤,這時候我們引入上面正確的依賴重新啟動項目即可

報錯信息

3.4 編寫HelloController

新建一個controller包--->建立一個HelloController

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        return "hello";
    }
}

我們在瀏覽器中輸入“http://localhost:8080/hello” 后回車,出現(xiàn)如下界面,說明我們的hello開發(fā)成功了

3.5 訪問swagger接口頁面

:我們這里采用的是openapi ,所以就不用像swaggerV2v3那樣添加配置類了

瀏覽器直接輸入:http://localhost:8080/swagger-ui/index.html 回車即可看到下面界面

整合swagger是不是很簡單呢

四、修改接口

從上面截圖中我們看到,我們在HelloController 中只定義了一個接口,但是前端UI界面中出來個7種請求方式(GET、PUTPOST、DELETEOPTIONS、HEAD、PATCH)的接口,這是為什么呢?

解答:@RequestMapping("/hello") 我們接口中只是指定了訪問地址,并沒有指定請求方式

我們將注解修改成@RequestMapping(path = "/hello",method = RequestMethod.GET)

或者@GetMapping("/hello") 然后重啟服務,我們看到界面上就只有一種請求方式的接口了

五、接口文檔常用配置

5.1 配置訪問路徑

application.yml中可以自定義api-docsswagger-ui的訪問路徑。當然了,如果沒配置,默認就是下面路徑

springdoc:
  api-docs:
    path: /v3/api-docs
  swagger-ui:
    path: /swagger-ui.html

5.2 配置接口文檔基本信息

① 配置接口基本信息

新建一個config包--->并在包下建立一個SpringDocConfig配置類

② 配置接口文檔基礎信息

我們在配置類中添加如下代碼,

@Configuration
public class SpringDocConfig {
    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI()
                // 配置接口文檔基本信息
                .info(this.getApiInfo())
                ;
    }
    private Info getApiInfo() {
        return new Info()
                 // 配置文檔標題
                .title("SpringBoot3集成Swagger3")
                // 配置文檔描述
                .description("SpringBoot3集成Swagger3示例文檔")
                // 配置作者信息
                .contact(new Contact().name("程序員小凡").url("https://www.xiezhrspace.cn").email("1666397814@163.com"))
                // 配置License許可證信息
                .license(new License().name("Apache 2.0").url("https://www.xiezhrspace.cn"))
                // 概述信息
                .summary("SpringBoot3集成Swagger3示例文檔aaa")
                .termsOfService("https://www.xiezhrspace.cn")
                // 配置版本號
                .version("2.0");
    }
}

前端頁面訪問接口文檔頁面后顯示如下

② 配置接口servers信息

接口可能存在多環(huán)境,如開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境等

我們可以通過@OpenAPIDefinition 配合servers 屬性來配置不同環(huán)境,具體配置示例如下

@OpenAPIDefinition(
        servers = {
                @Server(description = "開發(fā)環(huán)境服務器", url = "http://localhost:8080"),
                @Server(description = "測試環(huán)境服務器", url = "https://test.xiezhr.com")
        }
)
@Configuration
public class SpringDocConfig {
    //...
}

配置完成后,瀏覽器訪問顯示如下

③ 配置外部文檔信息

有時候我們需要在在線接口文檔中可以顯示跳轉到API的一些外部文檔(比如 項目部署文檔等)

這個時候我們可以通過@OpenAPIDefinition 配合 externalDocs 屬性來配置外部文檔

具體配置如下

@OpenAPIDefinition(
    externalDocs = @ExternalDocumentation(
        description = "項目編譯部署說明",
        url = "http://localhost:8080/deplay/readme.md"
    )
)
@Configuration
public class SpringDocConfig {
    //......
}

配置完后重啟服務,瀏覽器訪問接口文檔,顯示如下

SpringDocConfig 類完整配置代碼如下

@OpenAPIDefinition(
        servers = {
                @Server(description = "開發(fā)環(huán)境服務器", url = "http://localhost:8080"),
                @Server(description = "測試環(huán)境服務器", url = "https://test.xiezhr.com")
        },
        externalDocs = @ExternalDocumentation(
                description = "項目編譯部署說明",
                url = "http://localhost:8080/deplay/readme.md"
        )
)
@Configuration
public class SpringDocConfig {
    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI()
                // 配置接口文檔基本信息
                .info(this.getApiInfo())
                ;
    }
    private Info getApiInfo() {
        return new Info()
                 // 配置文檔標題
                .title("SpringBoot3集成Swagger3")
                // 配置文檔描述
                .description("SpringBoot3集成Swagger3示例文檔")
                // 配置作者信息
                .contact(new Contact().name("程序員小凡").url("https://www.xiezhrspace.cn").email("1666397814@163.com"))
                // 配置License許可證信息
                .license(new License().name("Apache 2.0").url("https://www.xiezhrspace.cn"))
                //
                .summary("SpringBoot3集成Swagger3示例文檔aaa")
                .termsOfService("https://www.xiezhrspace.cn")
                // 配置版本號
                .version("2.0");
    }
}

配置完上面信息后,重啟服務,瀏覽器訪問:http://localhost:8080/v3/swagger-ui/index.html

5.3 配置掃描接口

應用場景:

有時候我們?yōu)榱藰I(yè)務需要,我們建立了多個包下的接口,如admin包下的,common包下的接口,

為了安全起見,我們只允許接口文檔中訪問comm包下面的接口。

在不加任何配置的情況下,所以接口都會默認顯示,具體如下

配置掃描接口包:

application.yml中可以自定義要掃描的接口包

springdoc:
  packages-to-scan: com.xiezhr.swaggerdemo.common.controller

配置好之后重啟服務,我們發(fā)現(xiàn)前臺UI只顯示了common包下面的接口了

5.4 配置接口文檔開關

使用場景:

為了接口安全,我們一般需要在測試(test)環(huán)境或者開發(fā)(dev)環(huán)境中開啟接口文檔,而在生產(chǎn)(prod)環(huán)境中 關閉接口文檔

這個應該怎么做呢?

這里涉及到SpringBoot多環(huán)境配置,忘記的小伙伴可以翻一翻之前的文章。傳送門:

我們創(chuàng)建三個配置文件,分別為

  • application-dev.yml 開發(fā)環(huán)境
  • application-test.yml 測試環(huán)境
  • application-prod.yml 生產(chǎn)環(huán)境

只需在①和②配置文件中添加如下配置

springdoc:
  api-docs:
    enabled: true

而③配置文件中添加

springdoc:
  api-docs:
    enabled: false

通過上面配置后,我們在開發(fā)和測試環(huán)境下:就能正常訪問http://localhost:8080/v3/swagger-ui/index.html#/

而在生產(chǎn)環(huán)境下就無法訪問,報如下錯誤

5.5 配置API分組

為了演示API分組,我們在controller包下面再建立admin包和common包,包下分別添加AdminControllerCommonController接口類,結構及代碼如下

AdminController

// AdminController
@RestController
@RequestMapping("/admin")
public class AdminController {
    @GetMapping("/index")
    public String  admin(){
        return "admin";
    }
}

CommonController

@RestController
@RequestMapping("/common")
public class CommonController {
   @GetMapping("/hello")
    public String hello(){
        return "hello";
    }
}

在默認情況(沒有分組)的情況下,所有包下接口都顯示在一一個默認組下面,如/common/* 和/admin/* 訪問路徑下的接口都顯示在一起,如下圖所示

這時,如果/common/* 下的接口比較多,/admin/* 下的接口也比較多,界面上顯示就很混亂

解決辦法就是添加分組信息,我們在SpringDocConfig 配置類中添加如下代碼,這樣就把接口分為了"common通用模塊組" 和"admin模塊組" 兩個組

@Bean("commonGroupApi")
public GroupedOpenApi webGroupApi() {
    return GroupedOpenApi.builder().group("common通用模塊組")
        .pathsToMatch("/common/**")
        .build();
}
@Bean("adminGroupApi")
public GroupedOpenApi adminGroupApi() {
    return GroupedOpenApi.builder().group("admin模塊組")
        .pathsToMatch("/admin/**")
        .build();
}

重啟服務,再訪問http://localhost:8080/v3/swagger-ui/index.html 如下

5.6 配置接口信息

@Tag 注解使用

對一個 operation 進行說明或定義的標簽,用在類或方法上,也可以用在 @OpenAPIDefinition 中定義標簽。

常用參數(shù):

  • name: 名稱
  • description: 接口描述信息

示例:

用在類上

@RestController
@RequestMapping("/common")
@Tag(name = "公共接口", description = "公共接口")
public class CommonController {
    //......
}

@Operation 注解使用

用于說明方法用途,用在方法上。

參數(shù):

  • summary:方法概要,方法的一個簡單介紹,建議 120 個字符內
  • description:方法描述,一般是很長的內容
  • hidden:是否隱藏

示例:

@GetMapping("/hello")
@Operation(summary = "hello接口", description = "hello接口描述" ,hidden = true)
public String hello(){
    return "hello";
}

@Parameter注解使用

用于說明方法參數(shù),用在方法參數(shù)上。

參數(shù):

  • name:指定的參數(shù)名
  • in:參數(shù)位置,可選 queryheader、pathcookie,默認為空,表示忽略
  • description:參數(shù)描述
  • required:是否必填,默認為 false

示例:

@GetMapping("/user/{id}")
public User getUser( @Parameter(name = "id",in = ParameterIn.PATH,description = "用戶ID",required = true) @PathVariable("id") Integer id){
    User user = userService.getUserById(id);
    return user;
}

前端頁面查看

@ApiResponse 注解使用

用于說明一個響應信息,用在 @ApiResponses 中。

參數(shù):

  • responseCode:HTTP 響應碼
  • description:描述

示例:

@GetMapping("/user/{id}")
@Operation(summary = "獲取用戶信息", description = "根據(jù)用戶ID獲取用戶信息")
@ApiResponses(value ={
    @ApiResponse(responseCode = "200", description = "請求成功"),
    @ApiResponse(responseCode = "404", description = "用戶不存在")            
})
public User getUser( @Parameter(name = "id",in = ParameterIn.PATH,description = "用戶ID",required = true) @PathVariable("id") Integer id){
    User user = userService.getUserById(id);
    return user;
}

完整配置

@RestController
@RequestMapping("/common")
@Tag(name = "公共接口", description = "公共接口")
public class CommonController {
    @Autowired
    private IUserService userService;
   @GetMapping("/hello")
   @Operation(summary = "hello接口", description = "hello接口描述" ,hidden = true)
    public String hello(){
        return "hello";
    }
    @GetMapping("/hi")
    @Operation(summary = "hi接口", description = "hi接口描述")
    public String Hi(){
        return "Hi 程序員小凡";
    }
    @GetMapping("/user/{id}")
    @Operation(summary = "獲取用戶信息", description = "根據(jù)用戶ID獲取用戶信息")
    @ApiResponses(value ={
            @ApiResponse(responseCode = "200", description = "請求成功"),
            @ApiResponse(responseCode = "404", description = "用戶不存在")
    })
    public User getUser( @Parameter(name = "id",in = ParameterIn.PATH,description = "用戶ID",required = true) @PathVariable("id") Integer id){
        User user = userService.getUserById(id);
        return user;
    }
}

重啟后,瀏覽器訪問http://localhost:8080/v3/swagger-ui/index.html 如下

5.7 配置實體信息

① 新建一個User實體類

@Data
public class User {
    private String name;
    private Integer age;
    private String email;
    private String address;
}

@Schema標簽使用

用于描述數(shù)據(jù)對象信息或數(shù)據(jù)對象屬性,比如各種POJO類及屬性,用在類或類屬性上。

參數(shù):

  • name:屬性名稱
  • description:屬性描述
  • required:是否必須
  • minLength:字符最小長度
  • maxLength:字符最大長度

③使用示例:

@Data
@Schema(description = "用戶實體類",name = "User")
public class User {
    @Schema(description = "用戶名",name =  "name",minLength =  6,maxLength = 20,required = true)
    private String name;
    @Schema(description = "年齡",name =  "age",required = true,minimum = "1",maximum = "100")
    private Integer age;
    @Schema(description = "郵箱",name =  "email",required = true)
    private String email;
    @Schema(description = "地址",name =  "address")
    private String address;
}

④ 瀏覽器訪問:http://localhost:8080/v3/swagger-ui/index.html ,我們看到配置的實體信息顯示出來了

六、接口調試

通過上面各種配置之后,我們的在線接口文檔基本上生成得差不多了。接下來我們就來說說怎么使用在線接口文檔進行接口測試

① 測試說明

在之前小節(jié)中我們開發(fā)了要給根據(jù)用戶ID 獲取用戶信息的接口getUser。我們現(xiàn)在要做的就是在前端UI界面中找到這個接口,

在開發(fā)環(huán)境下輸入用戶ID值,然后獲取用戶信息。

② 選擇組信息

【獲取用戶信息】這個接口在,common通用模塊組下面,所以我們第一步就要前端UI界面右上角選擇這個組

② 選擇開發(fā)環(huán)境

Servers 下選擇配置好的開發(fā)環(huán)境

找到我們要測試的接口

④ 測試接口,獲取響應數(shù)據(jù)

接口右邊下三角箭頭展開接口------>點擊Try it out

輸入?yún)?shù):用戶ID------> 點擊【Execute】----->在Response body 中查看接口響應信息

七、添加請求頭

很多時候我們接口都需要認證之后才能訪問,這時候我們就需要接口調用的時候攜帶著Token信息

示例:

我們通過@RequestHeader 注解 獲取請求頭中token信息

@GetMapping("/index")
public String  admin(@RequestHeader ("token") String token){
	System.out.println("token>>>>>>>>>>>>>>>>>>>>>>>>"+token);
    //token 驗證
    //.....各種業(yè)務邏輯
    return "admin";
}

本文來自博客園,作者:xiezhr,轉載請注明原文鏈接:https://www.cnblogs.com/xiezhr/p/18253311

到此這篇關于SpringBoot3整合SpringDoc實現(xiàn)在線接口文檔的文章就介紹到這了,更多相關SpringBoot3在線接口文檔內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringMVC實現(xiàn)防止重復提交表單的方法詳解

    SpringMVC實現(xiàn)防止重復提交表單的方法詳解

    在Web開發(fā)中,防止表單重復提交是一個常見的需求,本文將介紹幾種在SpringMVC框架中防止表單重復提交的有效方法,有需要的小伙伴可以了解下
    2025-06-06
  • SpringBoot文件上傳大小設置方式(yml中配置)

    SpringBoot文件上傳大小設置方式(yml中配置)

    這篇文章主要介紹了SpringBoot文件上傳大小設置方式(yml中配置),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Netty客戶端接入流程NioSocketChannel創(chuàng)建解析

    Netty客戶端接入流程NioSocketChannel創(chuàng)建解析

    這篇文章主要為大家介紹了Netty客戶端接入流程NioSocketChannel創(chuàng)建源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • MybatisPlus整合Flowable出現(xiàn)的坑及解決

    MybatisPlus整合Flowable出現(xiàn)的坑及解決

    這篇文章主要介紹了MybatisPlus整合Flowable出現(xiàn)的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • SpringBoot Security+JWT簡單搭建的實現(xiàn)示例

    SpringBoot Security+JWT簡單搭建的實現(xiàn)示例

    本文介紹在Spring Boot 2.6.13項目中集成Security與JWT實現(xiàn)認證鑒權的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-09-09
  • Java實現(xiàn)彈窗效果的基本操作

    Java實現(xiàn)彈窗效果的基本操作

    這篇文章主要為大家詳細介紹了Java實現(xiàn)彈窗效果的基本操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Spring入門到精通之Bean標簽詳解

    Spring入門到精通之Bean標簽詳解

    這篇文章主要為大家詳細介紹了Spring中Bean的標簽,文中的示例代碼講解詳細,對我們學習Spring有一定的幫助,快跟隨小編一起學習學習吧
    2022-07-07
  • 新手必備的IDEA常用設置總結

    新手必備的IDEA常用設置總結

    今天給大家總結了一些IDEA的常用設置,文中有非常詳細的圖文介紹,對正在學習使用IDEA的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • java中set接口使用方法詳解

    java中set接口使用方法詳解

    這篇文章主要為大家詳細介紹了java中set接口使用方法,介紹了Java中Set集合接口實現(xiàn)插入對象不重復的原理,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 使用Maven Archetype插件構建Maven工程原型模板的實例

    使用Maven Archetype插件構建Maven工程原型模板的實例

    下面小編就為大家分享一篇使用Maven Archetype插件構建Maven工程原型模板的實例,具有很好的參考價值,希望對大家有所幫助
    2017-12-12

最新評論

遂宁市| 九龙坡区| 大安市| 浠水县| 唐海县| 图片| 中西区| 始兴县| 新疆| 深泽县| 莫力| 蓬莱市| 两当县| 南投县| 辉南县| 图片| 龙岩市| 兴业县| 东乌珠穆沁旗| 民县| 炎陵县| 许昌市| 泗阳县| 信宜市| 安溪县| 英吉沙县| 阿尔山市| 宜黄县| 浮山县| 科尔| 汨罗市| 曲阜市| 随州市| 交城县| 马尔康县| 宣汉县| 昌黎县| 蒙阴县| 长春市| 岳池县| 武平县|