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

springBoot詳解集成Swagger流程

 更新時間:2022年06月28日 08:48:57   作者:奔走的王木木Sir  
Swagger是一個規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化?Restful?風格的?Web?服務??傮w目標是使客戶端和文件系統(tǒng)作為服務器以同樣的速度來更新。文件的方法、參數(shù)和模型緊密集成到服務器端的代碼,允許API來始終保持同步

目標:

  • 了解Swagger的作用和概念
  • 了解前后端分離
  • 在springBoot中集成Swagger

Swagger簡介

前后端分離

VUE+springBoot

  • 后端 :后端控制層、服務層、數(shù)據(jù)訪問層
  • 前端 :前端控制層、視圖層
  • 前后端通過API進行交互
  • 前后端相對獨立,松耦合
  • 可以部署在不同的服務器上

產(chǎn)生的問題

前后端集成,前端或者后端無法做到“及時協(xié)商,盡早解決”,最終導致問題集中爆發(fā)

解決方案

首先定義計劃的提綱,并實時跟蹤最新的API,降低集成風險

Swagger

  • 號稱世界上最流行的API框架
  • Restful Api 文檔在線自動生成器 =>API 文檔 與API 定義同步更新
  • 直接運行,可以在線測試API接口;
  • 支持多種語言 (如:Java,PHP等)
  • 官網(wǎng):https://swagger.io/

SpringBoot集成Swagger

新建一個springboot-web項目

下載maven依賴https://mvnrepository.com/search?q=springfox

<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

高版本是沒有第5部的測試頁面

3.0.0版本的要先在啟動類中加上注解@EnableOpenApi先在導入<groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId>

編寫Controller,測試運行成功

配置Swagger=》在包Config下

package com.hxl.config;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2 //開啟swagger2
public class SwaggerConfig {
}

測試運行:http://localhost:8080/swagger-ui.html

配置Swagger

Swagger實例Bean是Docket,所以通過配置Docket實例來配置Swaggger。

//配置了Swagger的Docket實例
@Bean
public Docket docket(){
    return new Docket(DocumentationType.SWAGGER_2);
}

再通過ApiInfo()屬性配置文檔信息

private ApiInfo apiInfo(){
    //作者信息
    Contact contact = new Contact("王木木","https://blog.csdn.net/qq_43585922?spm=1000.2115.3001.5343","11@qq.com");
    return new ApiInfo(
        "Swagger筆記", //標題
        "沖沖沖", //描述
        "v1.0。0", //版本
        "https://blog.csdn.net/qq_43585922?spm=1000.2115.3001.5343", //組織鏈接
        contact, //聯(lián)系人信息
        "Apach 2.0 許可", //許可
        "許可鏈接", //許可連接
        new ArrayList<>()//擴展
    );
}

Docket關聯(lián)上ApiInfo

@Bean
public Docket docket(){
    return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
}

啟動項目,訪問http://localhost:8080/swagger-ui.html

Swagger配置掃描接口

構(gòu)建Docket時通過select()方法配置怎么掃描接口。select()build()是一套的

//配置了Swagger的Docket實例
@Bean
public Docket docket(){
    return new Docket(DocumentationType.SWAGGER_2)
        .apiInfo(apiInfo())
        .select()
        /*
                RequestHandlerSelectors:要掃描接口的方式
                basePackage:指定要掃描的包
                any():掃描全部
                none():不掃描
                withClassAnnotation:掃描類上的注解,參數(shù)是一個注解的反射對象
                withMethodAnnotation:掃描方法上的注解
                path():過濾什么路徑
                */
        .apis(RequestHandlerSelectors.basePackage("com.hxl.controller"))
        //.paths(PathSelectors.ant("/hxl/**"))
        .build();
}

我們看之前的運行結(jié)構(gòu)可以看到有base-error-controllerhello-controller,一旦使用了上述配置后,運行結(jié)果只有hello-controller

配置是否啟動Swagger

通過enable()方法配置是否啟用swagger

@Bean
public Docket docket(){
    return new Docket(DocumentationType.SWAGGER_2)
        .apiInfo(apiInfo())
        //enable是否啟動Swagger,默認為true,如果該位false則不能在瀏覽器中訪問
        .enable(false)
        .select()
        /*
                RequestHandlerSelectors:要掃描接口的方式
                basePackage:指定要掃描的包
                any():掃描全部
                none():不掃描
                withClassAnnotation:掃描類上的注解,參數(shù)是一個注解的反射對象
                withMethodAnnotation:掃描方法上的注解
                path():過濾什么路徑
                */
        .apis(RequestHandlerSelectors.basePackage("com.hxl.controller"))
        //.paths(PathSelectors.ant("/hxl/**"))
        .build();
}

Swagger在生產(chǎn)環(huán)境中使用,在發(fā)布的時候不使用

  • 判斷是否是生產(chǎn)環(huán)境
  • 注入enable()值

當我們有多個生產(chǎn)環(huán)境時。比如說application-dev.yamlapplication-pro.yaml。動態(tài)設置當前項目處于dev時顯示swagger,Pro是不顯示

#哪個環(huán)境生效
spring.profiles.active=dev

設置我們的dev走8081,默認走8080,pro走8082

然后修改我們的配置

@Bean
public Docket docket(Environment environment){
    //設置顯示的Swagger環(huán)境
    Profiles profiles = Profiles.of("dev", "test");
    //通過  判斷是否處在自己設定的環(huán)境中
    boolean flag = environment.acceptsProfiles(profiles);
    return new Docket(DocumentationType.SWAGGER_2)
        .apiInfo(apiInfo())
        //這里變成了flag
        .enable(flag)
        .select()     
        .apis(RequestHandlerSelectors.basePackage("com.hxl.controller"))
        .build();
}

此時我們就發(fā)現(xiàn),如果我們走默認的8080是沒有Swagger的,走8081才有

配置API文檔的分組

@Bean
public Docket docket(Environment environment){
    return new Docket(DocumentationType.SWAGGER_2)
        .apiInfo(apiInfo())
        .groupName("王木木");
    //其余配置省略
}

啟動項目就發(fā)現(xiàn)我們的組別有了

如果有多個分組怎么辦?只需要配置多個docket即可

//其他的環(huán)境需要自己填
@Bean
public Docket docket1(){
    return new Docket(DocumentationType.SWAGGER_2).groupName("天");
}
@Bean
public Docket docket2(){
    return new Docket(DocumentationType.SWAGGER_2).groupName("狼");
}

實體類配置

創(chuàng)建一個實體類

package com.hxl.pojo;
public class User {
    public String username;
    public String password;
}

只要這個實體在請求接口的返回值上,就可以映射到實體項中

//只要我們的接口中,返回值存在實體類,他就會掃描到Swagger中
@PostMapping("/user")
public User user(){
    return new User();
}

測試

此時發(fā)現(xiàn)我們的Model中有了User。如果有中文的注釋,只需要在加兩個注解

package com.hxl.pojo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
//@Api("注釋")
@ApiModel("用戶實體類")
public class User {
    @ApiModelProperty("姓名")
    public String username;
    @ApiModelProperty("密碼")
    public String password;
}

測試

常用的注解

Swagger的所有注解定義在io.swagger.annotations包下

Swagger注解簡單說明
@Api(tags = “xxx模塊說明”)作用在模塊類上
@ApiOperation(“xxx接口說明”)作用在接口方法上
@ApiModel(“xxxPOJO說明”)作用在模型類上:如VO、BO
@ApiModelProperty(value = “xxx屬性說明”,hidden = true)作用在類方法和屬性上,hidden設置為true可以隱藏該屬性
@ApiParam(“xxx參數(shù)說明”)作用在參數(shù)、方法和字段上

注解在類上的可以看一下上面的,接下來看注解在接口方法上,以及參數(shù)上

@ApiOperation("王木木的接口")
@PostMapping("/hxl")
public String hxl(@ApiParam("用戶名")String username){
    return username;
}

在這里還可以進行測試

小結(jié)

  • 我們可以通過Swagger給一些比較難理解的屬性或者接口增加注釋信息
  • 接口文檔實時更新
  • 可以在線測試
  • 在正式發(fā)布的時候一定要關閉Swagger《安全;節(jié)省運行的內(nèi)存》

到此這篇關于springBoot詳解集成Swagger流程的文章就介紹到這了,更多相關springBoot Swagger內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MyBatis-plus的五種批量插入方式對比分析

    MyBatis-plus的五種批量插入方式對比分析

    本文主要介紹了MyBatis-plus的五種批量插入方式對比分析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • Java設計模式常用原則解析

    Java設計模式常用原則解析

    這篇文章主要介紹了Java設計模式常用原則解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • java實現(xiàn)文件上傳下載功能

    java實現(xiàn)文件上傳下載功能

    這篇文章主要介紹了java實現(xiàn)文件上傳下載功能,上傳單個或多個文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java實現(xiàn)數(shù)字金額轉(zhuǎn)化為英文金額功能

    Java實現(xiàn)數(shù)字金額轉(zhuǎn)化為英文金額功能

    在處理財務數(shù)據(jù)時,有時需要將數(shù)字形式的金額轉(zhuǎn)換成英文描述的形式,比如在生成正式文件或發(fā)票時,本文將介紹如何使用Java實現(xiàn)這一功能,需要的朋友可以參考下
    2025-03-03
  • 頁面設計之事件處理綜合介紹

    頁面設計之事件處理綜合介紹

    頁面設計之事件處理,當你把界面都設計好了,總需要添加相應的執(zhí)行動作給組件,在有相應的時間處理機制
    2012-12-12
  • Spring實戰(zhàn)之使用TransactionProxyFactoryBean實現(xiàn)聲明式事務操作示例

    Spring實戰(zhàn)之使用TransactionProxyFactoryBean實現(xiàn)聲明式事務操作示例

    這篇文章主要介紹了Spring實戰(zhàn)之使用TransactionProxyFactoryBean實現(xiàn)聲明式事務操作,結(jié)合實例形式分析了spring使用TransactionProxyFactoryBean實現(xiàn)聲明式事務相關配置、接口設置與使用技巧,需要的朋友可以參考下
    2020-01-01
  • IDEA2020.1常用配置說明

    IDEA2020.1常用配置說明

    這篇文章主要介紹了IDEA2020.1常用配置說明,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • java實現(xiàn)超市庫存管理系統(tǒng)

    java實現(xiàn)超市庫存管理系統(tǒng)

    這篇文章主要為大家詳細介紹了java實現(xiàn)超市庫存管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • java定時調(diào)度器(Quartz)使用實例

    java定時調(diào)度器(Quartz)使用實例

    這篇文章主要介紹了java開源定時調(diào)度器使用方法
    2013-12-12
  • 淺談JAVA中輸入輸出流實例詳解

    淺談JAVA中輸入輸出流實例詳解

    Java中的流分為兩種,一種是字節(jié)流,另一種是字符流。這篇文章主要介紹了JAVA中輸入輸出流的相關資料,需要的朋友可以參考下
    2016-07-07

最新評論

宝丰县| 略阳县| 宜昌市| 松桃| 兴山县| 雷波县| 铜川市| 宁海县| 浦县| 朝阳市| 淮滨县| 贵阳市| 三都| 丘北县| 荆门市| 县级市| 九台市| 泗阳县| 从化市| 阿拉善右旗| 寿光市| 梅河口市| 永兴县| 克山县| 和硕县| 宜宾县| 永靖县| 荆门市| 洛隆县| 镇平县| 邛崃市| 曲阜市| 壤塘县| 阿克苏市| 衡阳县| 哈密市| 杨浦区| 鄱阳县| 磐安县| 屏南县| 宜丰县|