堅(jiān)持學(xué)習(xí)第五天:SpringBoot 2.x 整合Swagger2 生成接口文檔

  • 認(rèn)真是一種態(tài)度,堅(jiān)持是一種品格,優(yōu)秀是一種習(xí)慣窖维!
    ????隨著技術(shù)的不斷革新啦吧,目前大多數(shù)互聯(lián)網(wǎng)公司引進(jìn)了前后端分離的開發(fā)模式颜武。前端負(fù)責(zé)頁面的開發(fā)璃搜,包括頁面樣式以及相關(guān)接口對接;而后端則專注于后臺業(yè)務(wù)的實(shí)現(xiàn)鳞上。這樣確實(shí)極大的提高了開發(fā)效率这吻。但同時也帶了溝通上的問題,因?yàn)榻涌诙际呛笈_實(shí)現(xiàn)和提供的因块。那么就必須寫好相應(yīng)的接口文檔橘原,告知前端接口地址、接口參數(shù)規(guī)范等等涡上。因此我們引入了swagger一個為接口文檔而生的開源項(xiàng)目趾断,它以注解的方式,讓后端在開發(fā)過程中就可以通過簡單便捷的方式完成接口文檔編寫吩愧。
    效果如下圖:
    接口文檔效果

基礎(chǔ)理論

  • swagger常用注解及說明:
    @Api():用于類芋酌,標(biāo)識這個類是swagger的資源
    @ApiOperation():用于方法,表示一個http請求的操作
    @ApiParam():用于方法,參數(shù)雁佳,字段說明脐帝; 表示對參數(shù)的添加元數(shù)據(jù)(說明或是否必填等)
    @ApiModel():用于類 ,表示對類進(jìn)行說明同云,用于參數(shù)用實(shí)體類接收
    @ApiModelProperty():用于方法,字段 ,表示對model屬性的說明或者數(shù)據(jù)操作更改
    @ApiIgnore():用于類堵腹,方法炸站,方法參數(shù) ,表示這個方法或者類被忽略
    @ApiImplicitParam(): 用于方法 ,表示單獨(dú)的請求參數(shù)
    @ApiImplicitParams(): 用于方法,包含多個@ApiImplicitParam
    Tips:
    若參數(shù)實(shí)體類某個參數(shù)不想顯示到接口文檔中疚顷,可通過ApiModelProperty實(shí)現(xiàn)旱易,實(shí)現(xiàn)方式:
    @ApiModelProperty(hidden=true)
  • 那么我們現(xiàn)在就簡單說說Springboot項(xiàng)目中如何整合進(jìn)swagger2.

項(xiàng)目框架:

JDK 1.8
SpringBoot 2.1.5.RELEASE
Swagger 2.9.2
swagger-bootstrap-ui 1.9.4

創(chuàng)建項(xiàng)目

堅(jiān)持學(xué)習(xí)第一天中已經(jīng)講過SpringBoot項(xiàng)目的創(chuàng)建了,此處不再贅述腿堤》Щ担可直接參考。

整合swagger2

  • Maven依賴添加
    在項(xiàng)目pom.xml中添加swagger2相應(yīng)的依賴笆檀。
      <!-- swagger2 主要依賴 --->
      <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
       <!-- swagger2 默認(rèn)主題樣式 --->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
       <!-- swagger2 bootstrap風(fēng)格主題樣式 --->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.9.4</version>
        </dependency>
  • swagger配置
    在項(xiàng)目中添加swagger基礎(chǔ)配置(SwaggerConfig.java)
package com.cooper.common;

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.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

/**
 * Swagger配置
 */
@Configuration
public class SwaggerConfig {

    /**
     * 通過 createRestApi函數(shù)來構(gòu)建一個DocketBean
     * 函數(shù)名,可以隨意命名,喜歡什么命名就什么命名
     */
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .enable(true)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.cooper.module"))
                .paths(PathSelectors.any())
                .build()
                .useDefaultResponseMessages(false)
                .apiInfo(apiInfo());
    }


    /**
     * 構(gòu)建 api文檔的詳細(xì)信息函數(shù)
     * @return  ApiInfo
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("copper_sp 接口文檔")
                .version("v1.0.0")
                .description("copper_sp 接口文檔")
                .build();
    }

} 

  • 啟動類中指定啟用Swagger
    在項(xiàng)目啟動主類添加注解@EnableSwagger2指定啟用swagger.
package com.cooper;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@EnableSwagger2
@SpringBootApplication
public class CooperSpApplication {

    public static void main(String[] args) {
        SpringApplication.run(CooperSpApplication.class, args);
    }

}

此時我們啟動項(xiàng)目忌堂,訪問默認(rèn)接口地址:xxxx/swagger-ui.html效果如下:

默認(rèn)swagger接口文檔

然后我們在訪問一下bootstrap風(fēng)格的接口地址:
xxxx/doc.html效果如下:

bootstrap風(fēng)格接口文檔

至此基本的整合我們就完成了。當(dāng)然部分整合時可能會出現(xiàn)swagger-ui.htmldoc.html訪問地址報(bào)404.若出現(xiàn)此等問題酗洒,可以嘗試將這兩個路由添加到springboot的資源管理中士修,實(shí)現(xiàn)方式如下:通過實(shí)現(xiàn)WebMvcConfigurer類后重寫addResourceHandlers方式實(shí)現(xiàn):


public class WebConfig  implements  WebMvcConfigurer { 

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("doc.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/"); 
    }
}

寫個接口文檔試試

上面我們已經(jīng)將swagger整合到springboot中了,接下來我們就寫個接口文檔看看效果寝蹈。

  • 接口文檔
 @ApiOperation(value = "分頁獲取用戶信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "name",value = "名稱",dataType = "String"),
            @ApiImplicitParam(name = "current",value = "當(dāng)前頁",required = true,dataType = "int",example = "1"),
            @ApiImplicitParam(name = "size",value = "分頁條數(shù)",required = true,dataType = "int",example = "10"),
    })
    @RequestMapping(value = "/list-with-page",method = {RequestMethod.GET,RequestMethod.POST})
    @ResponseBody
    public IPage<User> listWithPage(String name, Page<User> page){
        return userService.listWithPage(name,page);
    }
  • 實(shí)際生成效果


    image.png

    image.png

至此springboot整合swagger2基本算完成了李命。我們可以稍許簡單的方式編寫接口文檔了。更多swagger知識箫老,待下次補(bǔ)充封字。
若有哪位好友有更方便快捷的方式歡迎賜教。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末耍鬓,一起剝皮案震驚了整個濱河市阔籽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌牲蜀,老刑警劉巖笆制,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異涣达,居然都是意外死亡在辆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門度苔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匆篓,“玉大人,你說我怎么就攤上這事寇窑⊙桓牛” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵甩骏,是天一觀的道長窗市。 經(jīng)常有香客問我先慷,道長,這世上最難降的妖魔是什么咨察? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任论熙,我火速辦了婚禮,結(jié)果婚禮上摄狱,老公的妹妹穿的比我還像新娘赴肚。我一直安慰自己,他們只是感情好二蓝,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著指厌,像睡著了一般刊愚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上踩验,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天鸥诽,我揣著相機(jī)與錄音,去河邊找鬼箕憾。 笑死牡借,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的袭异。 我是一名探鬼主播钠龙,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼御铃!你這毒婦竟也來了碴里?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤上真,失蹤者是張志新(化名)和其女友劉穎咬腋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體睡互,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡根竿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了就珠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寇壳。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嗓违,靈堂內(nèi)的尸體忽然破棺而出九巡,到底是詐尸還是另有隱情,我是刑警寧澤蹂季,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布冕广,位于F島的核電站疏日,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏撒汉。R本人自食惡果不足惜沟优,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望睬辐。 院中可真熱鬧挠阁,春花似錦、人聲如沸溯饵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丰刊。三九已至隘谣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間啄巧,已是汗流浹背寻歧。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秩仆,地道東北人码泛。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像澄耍,于是被迫代替她去往敵國和親噪珊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344