SpringBoot中使用Swagger生成RestFul規(guī)范API文檔

1. 在pom.xml文件中添加依賴

        <!-- springfox-swagger2 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!-- springfox-swagger-ui -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

2. 創(chuàng)建swagger配置類

package com.bitzh.config;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * Swagger 配置文件
 */
@Configuration      //標記為配置類
@EnableSwagger2     //開啟swagger
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.bitzh.controller"))
                //basePackage可以指定生成api的包,指定的包下面的controller類中的requestMapping方法會生成api解釋
                .paths(PathSelectors.any())
                .build();
    }

    //配置封面信息
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("圖書管理系統(tǒng)接口文檔")            //封面標題
                .description("此文檔描述了****")         //文檔描述
                .contact(new Contact("張三","www.abc142162.com","z5123451@163.com"))  //聯(lián)系人
                .version("1.0")     //版本號
                .build();
    }
}

封面效果

3. 為controller哗戈、requestMapping方法及其中的參數添加詳細解釋

package com.bitzh.controller;


import com.bitzh.entity.User;
import com.bitzh.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

@RestController
@Api(tags = "用戶信息管理接口")
public class UserController {

    @Resource
    private UserService userService;


    @RequestMapping(value = "/test/{id}",method = RequestMethod.GET)
    @ApiOperation(value = "根據ID查詢用戶",notes = "根據ID查詢用戶,返回用戶對象")
    @ApiImplicitParam(name = "id",value = "用戶ID",required = true,dataType = "int")
    public User getUser(@PathVariable("id") int userId){
        User user = userService.queryUserByUserId(userId);
        return user;
    }

    @GetMapping("/test/{userId}/{userName}")
    @ApiOperation(value = "打印用戶信息",notes = "打印出用戶的ID和用戶名")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "userId",value = "用戶ID",required = true,dataType = "int"),
            @ApiImplicitParam(name = "userName",value = "用戶名",required = true,dataType = "string")
    })
    public void printUser(@PathVariable("userId") int userId,@PathVariable("userName") String userName){
        System.out.println(userId+userId);
    }
}

實現效果


4. 為實體類添加詳細描述

package com.bitzh.entity;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

/**
 * 對實體對象添加詳細描述
 */
@Data
@ApiModel(value = "user對象",description = "用戶信息")
public class User {
    @ApiModelProperty(value = "用戶ID",dataType = "int",required = true)
    private int userId;
    @ApiModelProperty(value = "用戶名",dataType = "string",required = true)
    private String userName;
    @ApiModelProperty(value = "用戶密碼",dataType = "string",required = true)
    private String userPwd;
    @ApiModelProperty(value = "鹽",dataType = "string")
    private String pwdSalt;
}

實現效果

啟動服務器,訪問:http://localhost:8080/swagger-ui.html
獲取生成的api文檔

常用類解釋

1. @Api
用在controller上悔捶,說明該controller的作用
@Api(value = "用戶信息管理接口")

2. @ApiOperation
用在方法上,說明方法的作用
@ApiOperation(value = "根據ID查找用戶", notes = "調用此接口的注意事項", httpMethod = "GET")

3 @ApiImplicitParams
用在方法上包含一組參數說明世蔗,例如:

@ApiImplicitParams({
@ApiImplicitParam(name = "userId",value = "用戶ID",required = true,dataType = "int"),
@ApiImplicitParam(name = "userName",value = "用戶名",required = true,dataType = "string")

})

4. @ApiImplicitParam
用在@ApiImplicitParams注解中嚎幸,指定一個請求參數的各個方面

paramType:參數放在哪個地方

  • header(參數放在請求頭中)–>請求參數的獲取:@RequestHeader
  • query(參數放在url中洗贰,例如findUser.action?userId=1)–>請求參數的獲日裔:@RequestParam
  • path(用于restful接口,例如/user/1)–>請求參數的獲攘沧獭:@PathVariable

name:參數名
dataType:參數類型
required:參數是否必須傳
value:參數的意思
defaultValue:參數的默認值

5. @ApiModel
描述一個Model的信息(這種一般用在post創(chuàng)建的時候许布,使用@RequestBody這樣的場景,請求參數無法使用@ApiImplicitParam注解進行描述的時候)绎晃,例如

@ApiModel(value = "用戶實體類",description = "用戶信息")
public class User {
}

6. @ApiModelProperty
描述一個model的屬性蜜唾,例如

@ApiModelProperty(value = "用戶ID",dataType = "int",required = true)
private int userId;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市庶艾,隨后出現的幾起案子灵妨,更是在濱河造成了極大的恐慌,老刑警劉巖落竹,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泌霍,死亡現場離奇詭異,居然都是意外死亡述召,警方通過查閱死者的電腦和手機朱转,發(fā)現死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來积暖,“玉大人藤为,你說我怎么就攤上這事《嵝蹋” “怎么了缅疟?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵分别,是天一觀的道長。 經常有香客問我存淫,道長耘斩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任桅咆,我火速辦了婚禮括授,結果婚禮上,老公的妹妹穿的比我還像新娘岩饼。我一直安慰自己荚虚,他們只是感情好,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布籍茧。 她就那樣靜靜地躺著版述,像睡著了一般。 火紅的嫁衣襯著肌膚如雪寞冯。 梳的紋絲不亂的頭發(fā)上院水,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機與錄音简十,去河邊找鬼。 笑死撬腾,一個胖子當著我的面吹牛螟蝙,可吹牛的內容都是我干的。 我是一名探鬼主播民傻,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼胰默,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了漓踢?” 一聲冷哼從身側響起牵署,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎喧半,沒想到半個月后奴迅,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡挺据,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年取具,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扁耐。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡暇检,死狀恐怖,靈堂內的尸體忽然破棺而出婉称,到底是詐尸還是另有隱情块仆,我是刑警寧澤构蹬,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站悔据,受9級特大地震影響庄敛,放射性物質發(fā)生泄漏。R本人自食惡果不足惜蜜暑,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一铐姚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肛捍,春花似錦隐绵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缀蹄,卻和暖如春峭跳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缺前。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工蛀醉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人衅码。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓拯刁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親逝段。 傳聞我的和親對象是個殘疾皇子垛玻,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359