Spring Boot 2.x (十二):Swagger2的正確玩兒法

dapan發表於2021-09-09

Swagger2簡介

簡單的來說,Swagger2的誕生就是為了解決前後端開發人員進行交流的時候API文件難以維護的痛點,它可以和我們的Java程式完美的結合在一起,並且可以與我們的另一開發利器Spring Boot來配合使用。

開始使用

第一步:匯入POM檔案

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency> 
        
        <!-- 這裡使用 swagger-bootstrap-ui 替代了原有醜陋的ui,拯救處女座~ -->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.9.0</version>
        </dependency>

#### 第二步:新增配置類

我們需要新增一個Swagger2Config 的配置類:

/**
 *  Swagger2 配置類
 * @author vi   
 * @since 2019/3/6 8:31 PM
 */@Configurationpublic class Swagger2Config {    @Bean
    public Docket createRestApi() {        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("indi.viyoung.viboot.*"))
                .paths(PathSelectors.any())
                .build();
    }    private ApiInfo apiInfo() {        return new ApiInfoBuilder()
                .title("viboot-swagger2")   //標題
                .description("Restful-API-Doc") //描述
                .termsOfServiceUrl("https://www.cnblogs.com/viyoung") //這裡配置的是服務網站,我寫的是我的部落格園站點~歡迎關注~
                .contact(new Contact("Vi的技術部落格", "https://www.cnblogs.com/viyoung", "18530069930@163.com")) // 三個引數依次是姓名,個人網站,郵箱
                .version("1.0") //版本
                .build();
    }
}

第三步:在啟動類中新增配置

注意一定要記得新增@EnableSwagger2註解

/**
 * @author vi
 * @since 2019/3/6 6:35 PM
 */@SpringBootApplication@ComponentScan(value = "indi.viyoung.viboot.*")@MapperScan(value = "indi.viyoung.viboot.swagger2.mapper")@EnableSwagger2@EnableSwaggerBootstrapUIpublic class ViBootSwaggerApplication {    public static void main(String[] args) {
        SpringApplication.run(ViBootSwaggerApplication.class, args);
    }
}

第四步:透過註解來完成API文件

1. @Api
註解名稱 註解屬性 作用域 屬性作用
@Api tags 說明該類的作用

value 說明該類的作用

舉個:

@Api(value = "使用者類控制器",tags="使用者類控制器")public class UserController {
...
}

圖片描述

2 . @ApiOperation
註解名稱 註解屬性 作用域 屬性作用
@ApiOperation() value 方法 描述方法作用

notes 方法 提示內容

tags 方法 分組

舉個:

    @ApiOperation(value = "獲取使用者列表",notes = "獲取使用者列表")    public List<User> get() {
        ...   
    }

圖片描述

3. @ApiParam
註解名稱 註解屬性 作用域 屬性作用
@ApiParam() name 方法引數 引數名

value 方法引數 引數說明

required 方法引數 是否必填

舉個:

    @ApiOperation(value="獲取使用者詳細資訊", notes="根據url的id來獲取使用者詳細資訊")    public User get(@ApiParam(name="id",value="使用者id",required=true) Long id) {
        log.info("GET..{}...方法執行。。。",id);        return userService.getById(id);
    }

圖片描述

4. @ApiModel && @ApiModelProperty
註解名稱 註解屬性 作用域 屬性作用
@ApiModel() value 物件名

description 描述
@ApiModelProperty() value 方法 欄位說明

name 方法 屬性名

dataType 方法 屬性型別

required 方法 是否必填

example 方法 舉例

hidden 方法 隱藏

舉個:

@ApiModel(value="user物件",description="使用者物件user")public class User implements Serializable {    private static final long serialVersionUID = 1L;    @TableId(value = "id", type = IdType.AUTO)    @ApiModelProperty(value = "使用者ID",example = "1000001",hidden=true)    private Long id;    @ApiModelProperty(value="使用者名稱",required = true,dataType = "String")    private String userName;    
    @ApiModelProperty(value = "密碼")    private String password;
}

圖片描述

5. @ApiImplicitParam && @ApiImplicitParams
`@ApiImplicitParam`可以單個用於方法至上,多個引數的話可以把`@ApiImplicitParam`放到`@ApiImplicitParams`中,這裡只羅列`@ApiImplicitParam`的屬性:
註解名稱 註解屬性 作用域 屬性作用
@ApiImplicitParam() value 方法 引數說明

name 方法 引數名

dataType 方法 資料型別

paramType 方法 引數型別

example 方法 舉例

舉個:

    @ApiImplicitParams({            @ApiImplicitParam(name = "user", value = "使用者實體user", required = true, dataType = "User")
    })    public void put(User user) {
        userService.updateById(user);
        log.info("PUT方法執行。。。");
    }

圖片描述這裡需要注意一點,我們並沒有在註解中寫圖中圈中的兩個引數,這個是去讀取了我們剛剛為User類的註解,並將使用者名稱設定為必填!

6.@ApiResposne && @ApiResponses

@ApiResponses@ApiResponse的關係和@ApiImplicitParam && @ApiImplicitParams 的關係和用法都是類似的

註解名稱 註解屬性 作用域 屬性作用
@ApiResponse() response 方法 返回類

code 方法 返回碼

message 方法 返回資訊

examples 方法 例子

圖片描述

最後再聊聊這個UI

先貼幾張spring-fox的ui(正是我們所熟知的那一套)
圖片描述

圖片描述



相信看到這裡,大家心裡對於這兩套UI的選擇應該都有個答案了,當然bootstrap風格的ui不僅好看,而且有各種強大的功能~

  1. 匯出md文件
    圖片描述

  2. 引數快取
    圖片描述

作者:

原文出處:https://www.cnblogs.com/viyoung/p/10493754.html  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/758/viewspace-2822077/,如需轉載,請註明出處,否則將追究法律責任。

相關文章